2010-01-06 38 views
6

希望這個問題有一個非常簡單的答案,但它不是我能找到的。我有一個看起來大致是這樣的一個小的XML文檔:在C#中,如何反序列化一個包含元素列表而不包含周邊列表元素的XML文檔

<aa> 
    <bb><name>bb1</name></bb> 
    <bb><name>bb2</name></bb> 
    <bb><name>bb3</name></bb> 
</aa> 

我有一個代表AA類和BB

[XmlRoot("aa")] 
public class aa 
{ 
    [XmlArray("bbs")] 
    [XmlArrayItem("bb")] 
    public bb[] bbs; 
} 

public class bb 
{ 
    [XmlElement("name")] 
    public string Name; 
} 

當我嘗試使用一個XmlSerializer我得到一個AA對象反序列化文檔一個null bbs屬性。 據我所知,這是因爲我在BBS上屬性所使用的屬性告訴串行期待這樣一個文件:

<aa> 
    <bbs> 
    <bb><name>bb1</name></bb> 
    <bb><name>bb2</name></bb> 
    <bb><name>bb3</name></bb> 
    </bbs> 
</aa> 

既然我不能改變我收到的XML的格式,是有一種方法可以告訴XmlSerialiser期待一個不包含在另一個標籤中的數組嗎?

回答

8

嘗試用更換您的[XmlArray("bbs")][XmlArrayItem("bb")]屬性的單一[的XmlElement]屬性

[XmlRoot("aa")] 
public class aa 
{ 
    [XmlElement("bb")] 
    public bb[] bbs; 
} 

public class bb 
{ 
    [XmlElement("name")] 
    public string Name; 
} 

通過將ArrayArrayItem屬性中,你明確地描述如何序列化這是一個數組包裝容器。

+0

完美,謝謝 – Dan 2010-01-06 11:16:24

4

將您的[XmlArray]/[XmlArrayItem]更改爲[XmlElement],它告訴序列化程序元素沒有包裝,例如,

[XmlRoot("aa")] 
public class aa 
{ 
    [XmlElement("bb")] 
    public bb[] bbs; 
} 

public class bb 
{ 
    [XmlElement("name")] 
    public string Name; 
} 
相關問題