2011-11-20 12 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 { 
    // ... 
} 

MSDN上this articleによると、これはシリアル化された項目のラッパー要素を削除します。

+2

この記事は正しいです。実際にはラッパー要素が削除されます。 'Type = typeof(...)'は重複していますが、無害で、btwです。 –

+2

"アイテム"は "MyDatum"のコレクションであり、単一のオブジェクト "MyDatum"ではないため、シンタックスは直感的です。私は実験で可能な解決策としてこれを推測したことはありません。私はあなたが "あなたの直感に逆らって動作しないと言うことができると思います。" –

関連する問題