【问题标题】:XmlSerializer.Deserialize on a List<> itemXmlSerializer.Deserialize 在 List<> 项目上
【发布时间】:2011-01-06 09:30:46
【问题描述】:

我已经尝试了在 SO 和其他地方可以找到的所有解决方案,但似乎无法弄清楚为什么这不起作用。

将 XML 字符串直接反序列化为一个对象,该对象有一个属性 - 一个 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; }
}

这是反序列化代码:

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

这里是 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>

这段代码编译运行,返回一个UpdateData类型的对象,但是Updates属性是空的。有什么想法吗?

【问题讨论】:

    标签: c# serialization xmlserializer


    【解决方案1】:

    尝试将列表中的属性更改为:

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

    【讨论】:

    • 谢谢布赖恩,辛苦了...快把我的头撞到墙上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多