2011-06-23 45 views
17

Tôi cần phải tuần tự hóa một đối tượng đến XML và ngược lại. XML được sửa và tôi không thể thay đổi nó. Tôi không tạo được cấu trúc này sau bookingList.Thay đổi thứ tự của các phần tử khi tuần tự hóa XML

Làm thế nào tôi có thể "nhóm" những <booking> yếu tố để xuất hiện như là một danh sách và giữ <error> & <counter> trước Danh sách này của <booking> yếu tố.

Xem ví dụ của tôi ở đây:

Cấu trúc tôi cần ....

<nicexml> 
<key_id>1234567</key_id> 
<surname>Jil</surname> 
<name>Sander</name> 
<station_id>1</station_id> 
<ownBookings> 
    <bookingList> 
     <error></error> 
     <counter>20</counter> 
     <booking> 
      <bookingID>1234567890</bookingID> 
     </booking> 
     <booking> 
      <bookingID>2345678901</bookingID> 
     </booking> 
    </bookingList> 
</ownBookings> 
</nicexml> 

Structure tôi nhận được với C# mã dưới đây ....

<nicexml> 
<key_id>1234567</key_id> 
<surname>Jil</surname> 
<name>Sander</name> 
<station_id>1</station_id> 
<ownBookings> 
    <bookingList> 
      <booking> 
     <booking> 
      <bookingID>1234567890</bookingID> 
     </booking> 
     <booking> 
      <bookingID>2345678901</bookingID> 
     </booking> 
      <booking> 
     <error></error> 
     <counter>20</counter> 
    </bookingList> 
</ownBookings> 
</nicexml> 

C# Code:

using System; 
using System.Xml.Serialization; 
using System.Collections.Generic; 

namespace xml_objects_serials 
{ 
    public class bookings 
    { 
     public class nicexml 
     { 
      public string key_id 
      { get; set; } 

      public string surname 
      { get; set; } 

      public string name 
      { get; set; } 

      public int station_id 
      { get; set; } 

      public ownBookings ownBookings 
      { get; set; } 

     } 

     public class ownBookings 
     { 
      public bookingList bookingList 
      { get; set; } 

     } 
     public class bookingList { 
      public string error 
      { get; set; } 
      public int counter 
      { get; set; } 
      public List<booking> booking= new List<booking>(); 
     } 

     public class booking 
     { 
      public int bookingID 
      { get; set; } 
     } 
    } 

Trả lời

25

Hãy thử trang trí chuyên nghiệp phần trăm của lớp học bookingList với số XmlElementAttribute, để kiểm soát cách các đối tượng của lớp đó sẽ được tuần tự hóa thành XML.

Dưới đây là một ví dụ:

public class bookingList 
{ 
    [XmlElement(Order = 1)] 
    public string error { get; set; } 
    [XmlElement(Order = 2)] 
    public int counter { get; set; } 
    [XmlElement(ElementName = "booking", Order = 3)] 
    public List<booking> bookings = new List<booking>(); 
} 

public class booking 
{ 
    public int id { get; set; } 
} 

Trong thử nghiệm của tôi, tôi thu được kết quả này:

<?xml version="1.0" ?> 
<bookingList> 
    <error>sample</error> 
    <counter>0</counter> 
    <booking> 
     <id>1</id> 
    </booking> 
    <booking> 
     <id>2</id> 
    </booking> 
    <booking> 
     <id>3</id> 
    </booking> 
</bookingList> 

nguồn lực liên quan:

+0

thx ... Phần tử đặt hàng ... tại sao tôi không nhận được điều này từ msdn .... CẢM ƠN BẠN –

+0

Tôi không biết về "yếu tố này". Cảm ơn bạn rất nhiều! –

-3

Tôi đã phải đối mặt với vấn đề này và tôi đã giải quyết nó ... Vâng nó rất thú vị, và đây là một lỗi trong .net có thể.

vấn đề là ở đây: public List<booking> booking= new List<booking>();

Bạn nên sử dụng: public List<booking> booking { get; set; }

Và bạn sẽ nhận được trình tự quy định .... nhưng tại sao? ai biết ... :)

Các vấn đề liên quan