views:

181

answers:

1

Hi all

I've tried all the solutions I could find on SO and elsewhere, but can't seem to figure out why this is not working.

Straightforward deserialization of an XML string into an object, the object has one property - a List:

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

Here is the 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);
}

And here is the 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"&gt;
    <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>

This code compiles and runs, and returns an object of type UpdateData, but the Updates property is empty. Any ideas?

+4  A: 

Try changing the attributes on your list to this:

[XmlArray(ElementName="Updates")]
[XmlArrayItem(ElementName="Update")]
public List<Update> Updates { get; set; }
Brian Ensink
Thanks Brian, works a treat... Off to beat my head against a wall.
Ravish