2011-01-29 3 views
8

.Netを使用したXMLシリアル化に関するもう1つの質問。ドキュメントルートのDeserialise XML配列

私は第三者からXMLストリングを受け取りました。それを最小限の騒ぎで.Netクラスに解析したいと思います。私のXMLはかなりシンプルなのでxsdを使いたくないし、吐き出す冗長クラスも気に入らない。私は、デシリアライゼーションの基本を理解していますが、ルートレベルの配列では苦労しています。

問題のXMLは以下の通りです:

<people> 
    <person> 
    <id>1234</id> 
    </person> 
    <person> 
    <id>4567</id> 
    </person> 
</people> 

がどのように私はそれをdeserialiseために私のC#の人々クラスの属性をマッピングしていますか?

これは私が動作させたいものですが、そうではありません。

[Serializable()] 
[XmlRootAttribute("people", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 

私はXMLをマングル場合:

<result> 
    <people> 
    <person> 
     <id>1234</id> 
    </person> 
    <person> 
     <id>4567</id> 
    </person> 
    </people> 
</result> 

そして、それは以下のクラス定義で動作しますが、それは非常に間違って感じています。

[Serializable()] 
[XmlRootAttribute("result", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArray(ElementName = "people")] 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 
+0

'[Serializable]'は必要ありません、btw - 'XmlSerializer'では使用しません –

答えて

9
[XmlElement("person")] 
public List<Person> Persons; 

実際に私が好むものの:

private List<Person> persons; 
[XmlElement("person")] 
public List<Person> Persons {get{return persons??(persons=new List<Person>());}} 

これは持っているよう:

  • 繰延リストの作成を、あなたが「いいえどんな人
  • を必要としないときのためにリストプロパティに「設定」します(必要ありません)
関連する問題