c# - 反序列化 XML 中的嵌套集合
问题描述
我从 Web 服务中获取了一些 XML,但它并没有按照我想要的方式反序列化。我想要一个 Row 元素的集合,其中每个元素都有一个 Value 元素的集合。但是,反序列化的对象仅捕获 XML 中的最后一个 Row 元素。以下是课程:
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class SimpleCodeList
{
[XmlArray("rowField")]
private SimpleCodeListValue[] rowField;
[System.Xml.Serialization.XmlArrayItemAttribute("Value", IsNullable = false)]
public SimpleCodeListValue[] Row
{
get
{
return this.rowField;
}
set
{
this.rowField = value;
}
}
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class SimpleCodeListValue
{
private string simpleValueField;
private string columnRefField;
public string SimpleValue
{
get
{
return this.simpleValueField;
}
set
{
this.simpleValueField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ColumnRef
{
get
{
return this.columnRefField;
}
set
{
this.columnRefField = value;
}
}
}
这是 XML:
<CodeList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="...">
<ColumnSet xmlns="">
<Column Id="code" Use="required">
<ShortName>Code</ShortName>
<Data Type="normalizedString" Lang="en" />
</Column>
<Column Id="name" Use="optional">
<ShortName>Name</ShortName>
<Data Type="normalizedString" Lang="en" />
</Column>
</ColumnSet>
<SimpleCodeList xmlns="">
<Row>
<Value ColumnRef="code">
<SimpleValue>1234</SimpleValue>
</Value>
<Value ColumnRef="name">
<SimpleValue>Service 123</SimpleValue>
</Value>
</Row>
<Row>
<Value ColumnRef="code">
<SimpleValue>5678</SimpleValue>
</Value>
<Value ColumnRef="name">
<SimpleValue>Service 456</SimpleValue>
</Value>
</Row>
...
如果我的类与给定的 XML 相对应正确,有人可以纠正我吗?谢谢你。
更新:我正在使用以下代码来反序列化 xml。
首先,我将 xml 字符串转换为 XmlDocument:
XmlDocument xml = new XmlDocument();
xml.LoadXml(responseFromServer);
然后通过这个函数运行它:
public static T Deserialize<T>(XmlDocument doc)
{
var serializer = new XmlSerializer(typeof(T));
XmlNodeReader reader = new XmlNodeReader(doc);
using (reader)
{
return (T)serializer.Deserialize(reader);
}
}
...
CodeList codelist = Utility.Deserialize<CodeList>(xml);
我可以通过检查 XmlDocument 看到有 100 多个元素,但“codelist”对象仅包含其中 1 个。
解决方案
推荐阅读
- php - Get value from select field and compare against database
- logging - 在 kubernetes 中列出集群范围内的事件的狭窄授权
- javascript - 如何从 .sjs 中的 JSON 创建 HTML 表?
- python - 为图形着色问题创建特定的节点顺序
- python - 匹配一个正则表达式组成员 1 或 n 次
- c++ - 如何强制链接器在 lib 文件中查找未修饰的名称?
- python-3.x - Selenium、ChromeDriver 和差异信息
- amazon-ecs - CodePipeline: ECR source + ECS deploy configuration
- python-3.x - 尝试在 geopy 中运行地理编码器时出现 [SSL: CERTIFICATE_VERIFY_FAILED] 错误如何验证证书以获得所需的输出?
- javascript - 使用默认值防止对象解构中的未定义