2010-01-18 4 views
18

J'ai essayé toutes les solutions que j'ai pu trouver sur SO et ailleurs, mais je n'arrive pas à comprendre pourquoi cela ne fonctionne pas.XmlSerializer.Deserialize sur une liste <> item

désérialisation Straightforward d'une chaîne XML dans un objet, l'objet a une propriété - une 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; } 
} 

Voici le code deserialize:

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

Et est le XML ici:

<?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> 

Ce code compile et s'exécute, et renvoie un objet de type UpdateData, mais le paramètre Up La propriété dates est vide. Des idées?

Répondre

24

Essayez de changer les attributs de votre liste à ceci:

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

Merci Brian, travaille un régal ... Off pour battre la tête contre un mur. – staterium