2011-11-20 27 views
13

我有一個簡單的對象圖,我想序列化,我一直無法找到解決這個問題的方法。那就是:如何讓XmlSerializer不序列化容器標籤?

[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; 
      } 
     } 
    } 

這將產生以下XML:

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

我想刪除 「項」 集裝箱電子標籤,而不是產生這樣的:

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

我已經嘗試了各種解決方案,但似乎無法找到解決方案。

回答

21

[XmlElement]屬性指定的元素名稱:

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

this article MSDN上,這將消除圍繞系列化項目的包裝元素。

+2

該文章是正確的;這將確實刪除包裝元素。 'Type = typeof(...)'是多餘的,但無害,順便說一句。 –

+2

由於「Items」是「MyDatum」的集合,而不是單個對象「MyDatum」,因此語法是違反直覺的。我從來沒有想到這是我實驗中可能的解決方案。我想你可以說「如果不行,那就違揹你的直覺吧。」 –