gpt4 book ai didi

c# - XmlSerializer.Deserialize 在 List<> 项上

转载 作者:IT王子 更新时间:2023-10-29 04:49:06 29 4
gpt4 key购买 nike

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

将 XML 字符串直接反序列化为一个对象,该对象具有一个属性 - 一个列表:

[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属性为空。有什么想法吗?

最佳答案

你的 Updates列表使用外部容器元素序列化 <Updates>和内部项目元素 <Update>所以将列表中的属性更改为:

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

XmlArrayAttribute + XmlArrayItemAttribute 序列化带有外部容器元素的集合时应该使用。 XmlElementAttribute 应该在没有外容器的情况下使用。

关于c# - XmlSerializer.Deserialize 在 List<> 项上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086635/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com