2017-01-09 1 views
2

ich zur Zeit eine Struktur als solcheXml serialize get Attribut auf Listenknoten

[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; } 
} 

haben die großen Werke für seinen Zweck, aber angesichts dieser xml

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

wie kann ich totalsize von itemlist erhalten, wenn Deserialisieren? Das XML ist etwas, das ich erhalte und das ich nicht kontrollieren kann.
Ich bin nicht auf der Suche nach GetAttributeValue oder ähnlich, aber rein mit XmlSerializer

+0

Mögliche Duplikate von [XML-Attribut mit XmlDocument lesen] (http://stackoverflow.com/questions/933687/read-xml-attribute-using-xmldocument) – PMerlet

+0

Sie müssen ein Attribut zu der Command-Klasse ähnlich dem hinzufügen ItemID-Attribut in der Item-Klasse. – jdweng

+0

Hinweis: Kopieren Sie Ihre XML, gehen Sie zu Visual Studio und wählen Sie * Bearbeiten> Inhalte einfügen> XML als Klassen einfügen *. Obwohl Namen, die Sie zuordnen, sollten Sie manuell –

Antwort

2

Sie müssen itemlist und item in zwei Klassen aufgeteilt.

[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; } 
} 

Als Neben beachten, dass ein XmlRoot Attribut für das root Element nur relevant ist. Dasjenige, das Sie unter Item haben, wird in diesem Fall ignoriert.

+0

Ich dachte, so viel, aber hoffte, dass ich keine andere Klasse machen musste, nur um die Extra-Totalsize zu halten. – smok