2017-01-09 53 views
2

我現在有一個結構,這樣的Xml連載取屬性

[XmlRoot("command")] 
public class Command 
{ 
    [XmlArray("itemlist")] 
    [XmlArrayItem("item")] 
    public List<Item> Items { get; set; } 
} 

[XmlRoot("item")] 
public class Item 
{ 
    [XmlAttribute("itemid")] 
    public string ItemID { get; set; } 
} 

爲它的目的偉大的工程,但考慮到該XML

<command> 
    <itemlist totalsize="999"> 
     <item itemid="1"> 
     <item itemid="2"> 
     ... 
    </itemlist> 
</command> 

我怎麼totalsizeitemlist時反序列化? XML是我收到的東西,並不是我可以控制的東西。
我不是在尋找GetAttributeValue或相似,但純粹使用XmlSerializer的

+0

可能重複的[使用XmlDocument讀取XML屬性](http://stackoverflow.com/questions/933687/read-xml-attribute-using-xmldocument) – PMerlet

+0

您需要添加一個屬性到類似於Item類中的ItemID屬性。 – jdweng

+0

提示:複製您的xml,轉到visual studio並選擇*編輯>選擇性粘貼>將XML粘貼爲類*。雖然名字映射你不應該手動 –

回答

2

您需要itemlistitem分成兩個班。

[XmlRoot("command")] 
public class Command 
{ 
    [XmlElement("itemlist")] 
    public ItemList ItemList { get; set; } 
} 

public class ItemList 
{ 
    [XmlAttribute("totalsize")] 
    public int TotalSize { get; set; } 

    [XmlElement("item")] 
    public List<Item> Items { get; set; } 
} 

public class Item 
{ 
    [XmlAttribute("itemid")] 
    public string ItemID { get; set; } 
} 

順便說一句,注意,XmlRoot屬性僅是元件上相關的。在這種情況下,你在Item上的那個被忽略。

+0

我想盡可能多,但希望我不需要另一個類只是爲了舉行額外的總數。 – smok