2010-01-18 14 views
18

Ich habe alle Lösungen versucht, die ich auf SO und anderswo finden konnte, aber kann nicht herausfinden, warum das nicht funktioniert.XmlSerializer.Deserialize auf einer Liste <> Element

Geradlinig Deserialisierung eines XML-String in ein Objekt, hat das Objekt eine Eigenschaft - eine Liste:

[XmlTypeAttribute(AnonymousType = true)] 
public class UpdateData 
{ 
    [XmlArrayItem(ElementName = "Updates")] 
    public List<Update> Updates { get; set; } 

    public UpdateData() 
    { 
     Updates = new List<Update>(); 
    } 

} 

public class Update 
{ 
    [XmlElement(ElementName = "MemberID")] 
    public int MemberID { get; set; } 

    [XmlElement(ElementName = "AnalysisID")] 
    public int AnalysisID { get; set; } 

    [XmlElement(ElementName = "MemberName")] 
    public string MemberName { get; set; } 

    [XmlElement(ElementName = "RecordDate")] 
    public DateTime RecordDate { get; set; } 
} 

Hier ist der deserialize Code:

private object DeserialzeXml(string xml) 
{ 
    var xmlSer = new XmlSerializer(typeof(UpdateData), new XmlRootAttribute("UpdateData")); 
    var stringReader = new StringReader(xml); 
    return xmlSer.Deserialize(stringReader); 
} 

Und hier ist die XML:

<?xml version="1.0" encoding="utf-8" ?> 
<UpdateData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Updates> 
     <Update> 
      <MemberID>1</MemberID> 
      <AnalysisID>1</AnalysisID> 
      <MemberName>XXXXXXXXXXXXX</MemberName> 
     </Update> 
     <Update> 
      <MemberID>1</MemberID> 
      <AnalysisID>2</AnalysisID> 
      <MemberName>YYYYYYYYYYYYY</MemberName> 
     </Update> 
     <Update> 
      <MemberID>1</MemberID> 
      <AnalysisID>3</AnalysisID> 
      <MemberName>ZZZZZZZZZZZZ</MemberName> 
     </Update> 
    </Updates> 
</UpdateData> 

Dieser Code wird kompiliert und ausgeführt und gibt ein Objekt vom Typ UpdateData, aber das Up zurück Daten Eigenschaft ist leer. Irgendwelche Ideen?

Antwort

24

Versuchen Sie, die Attribute auf Ihrer Liste zu diesem Wechsel:

[XmlArray(ElementName="Updates")] 
[XmlArrayItem(ElementName="Update")] 
public List<Update> Updates { get; set; } 
+0

Dank Brian arbeitet ein Genuss ... Aus meinem Kopf gegen eine Wand zu schlagen. – staterium

Verwandte Themen