开发者

XmlSerializer.Deserialize on a List<> item

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 Li开发者_运维百科st:

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


Your Updates list is serialized with an outer container element <Updates> and inner item elements <Update> so change the attributes on your list to this:

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

XmlArrayAttribute + XmlArrayItemAttribute should be used when serializing a collection with an outer container element. XmlElementAttribute should be used when there is no outer container.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜