使用c#反序列化xml中的重复元素
Posted
技术标签:
【中文标题】使用c#反序列化xml中的重复元素【英文标题】:deserialize repeated element in xml using c# 【发布时间】:2021-09-06 21:29:04 【问题描述】:我收到一条回复,其中包含以下内容:
<carList>
<numberOfRecords>237</numberOfRecords>
<year>1982</year>
<year>1983</year>
<year>1978</year>
<year>1955</year>
<year>1998</year>
</carList>
这是更大的 xml 文档的一部分,我可以对其余部分进行消毒,但这部分我不能。我其余的消毒物品都很好。 这是我的模型:
public class Response
[XmlArray( "carList")]
[XmlArrayItem("year")]
//[XmlElement("carList")]
public CarList? CarList get; set;
public class CarList
[XmlElement("numberOfRecords")]
public int? NumberOfRecords get; set;
[XmlElement("year")]
public List<string>? Year get; set;
我的反序列化器:
XmlDeserializer xmldes = new XmlDeserializer();
var deserializedResponse = xmldes.Deserialize<Response>(response);
【问题讨论】:
【参考方案1】:你只有一个carList
,所以应该是:
[XmlElement("carList")]
public CarList? CarList get; set;
假设这是一个子节点,而不是根元素(在这种情况下:[XmlRoot("carList")]
位于 CarList
本身,并完全失去 Response
)
【讨论】:
你是对的,它不是根元素。它是更大的 xml 的一部分。我的 carList 仅包含一些汽车以及年份列表。如果我使用你提到的方式,“NumberofRecords”会被填充,但年份列表是空的 @Pamador 在这里工作正常:gist.github.com/mgravell/0a1d3a1de0cd9ab0614b375dc5425bb8 - 你有没有显示它不起作用的复制品?真正的代码可能是使用 xml 命名空间和/或命名空间前缀吗? 感谢您的评论。如果您指的是根元素,则在根元素上有名称空间。我做了类似的事情,但没有奏效。当我反序列化 xml 时,记录数得到正确的值,但我的列表没有。 @Pamador 命名空间在 xml 反序列化中至关重要;如果您想要与您的数据匹配的代码,则需要显示包含类似于您的场景的示例 xml - 否则 它将不起作用 是的,我在不同的项目中尝试过,和你一样,它在那里工作。这是 xml: w3.org/2001/XMLSchema" xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns="abr.business.gov.au/ABRXMLSearch">以上是关于使用c#反序列化xml中的重复元素的主要内容,如果未能解决你的问题,请参考以下文章