2011-11-20 9 views
13

Tôi có một đồ thị đối tượng đơn giản mà tôi muốn sắp xếp theo thứ tự, tôi không thể tìm ra giải pháp cho vấn đề này. Ở đây là:Làm cách nào để XmlSerializer không được sắp xếp các thẻ vùng chứa?

[XmlRoot] 
    public partial class MyData 
    { 

     private List<MyDatum> itemsField; 

     public MyData() 
     { 
      this.anyAttrField = new List<System.Xml.XmlAttribute>(); 
      this.itemsField = new List<MyDatum>(); 
     } 

     [XmlElement(Type = typeof(MyDatum))] 
     public List<MyDatum> Items 
     { 
      get 
      { 
       return this.itemsField; 
      } 
      set 
      { 
       this.itemsField = value; 
      } 
     } 
    } 

này tạo ra XML sau đây:

<MyData> 
    <Items> 
     <MyDatum/> 
     <MyDatum/> 
     ... 
    </items> 
</MyData> 

Tôi muốn loại bỏ các thẻ container "Items" để sản xuất này để thay thế:

<MyData> 
    <MyDatum/> 
    <MyDatum/> 
    ... 
</MyData> 

Tôi đã đã thử tất cả các loại giải pháp, nhưng dường như không thể tìm ra giải pháp.

Trả lời

21

Chỉ định một tên phần tử trong thuộc tính [XmlElement] của bạn:

[XmlElement("MyDatum", Type = typeof(MyDatum))] 
public List<MyDatum> Items { 
    // ... 
} 

Theo this article trên MSDN, điều này sẽ loại bỏ các yếu tố bao bọc xung quanh các mục tuần tự.

+2

Bài viết là chính xác; điều đó thực sự sẽ xóa phần tử trình bao bọc. 'Type = typeof (...)' là thừa nhưng vô hại, btw. –

+2

Cú pháp phản trực giác vì "Mục" là tập hợp "MyDatum" và không phải là một đối tượng đơn lẻ "MyDatum". Tôi chưa bao giờ đoán đây là giải pháp khả thi trong các thí nghiệm của mình. Tôi đoán bạn có thể nói "Nếu nó không hoạt động thì hãy chống lại trực giác của bạn." –