2011-01-29 50 views
8

使用.Net進行XML序列化的另一個問題。文檔根目錄下的反序列化XML數組

我正在接收來自第三方的XML字符串,並且想要用最少的大驚小怪的方式將它解析爲.Net類。我不想使用xsd,因爲我的XML非常簡單,我不喜歡它吐出的詳細類。我已經掌握了反序列化的基礎知識,但我正在努力使用根級數組。

問題XML是如下:

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

如何映射在我的C#類人的屬性deserialise呢?

這是我想工作,但它沒有。

[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]`,順便說一句 - 它不被`XmlSerializer`使用 – 2011-01-29 13:10:18

回答

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

雖然實際上我更喜歡:

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

,因爲這有:

  • 推遲列表的創建,當你不需要任何人
  • 沒有「設置「列表屬性(這是不需要的)