【发布时间】:2017-08-08 11:50:35
【问题描述】:
请帮助我建立具有相同名称但内容不同的多个标签的 XML 反序列化模型。
<?xml version="1.0" encoding="utf-16"?>
<found>
<prefixes>
<prefix name="Name1">Val1</prefix>
<prefix name="Name2">Val2</prefix>
</prefixes>
<objects>
<object handle="0">
<User>
<familyName>Family</familyName>
<givenName>Given1</givenName>
</User>
</object>
<object handle="0">
<User>
<familyName>Family2</familyName>
<givenName>Given2</givenName>
</User>
</object>
</objects>
<objects>
<object handle="0">
<User>
<familyName>Family3</familyName>
<givenName>Given3</givenName>
</User>
</object>
<object handle="0">
<User>
<familyName>Family4</familyName>
<givenName>Given4</givenName>
</User>
</object>
</objects>
此 XML 包含 2 个包含在标签 <objects> 中的集合。出于调试目的,我对两个<objects> 标签使用了相同的内容,但实际上它们会有所不同。此外,每个集合的内容可能会发生变化,但文档的结构是相同的:它包含前缀集合和 2 个对象集合。
以下是用于序列化/反序列化此 xml 的数据对象:
[XmlRoot(ElementName = "found", IsNullable = true)]
public class UserProfileDto
{
[XmlArray("prefixes", Order = 0)]
[XmlArrayItem("prefix", IsNullable = false)]
public PrefixDto [] Prefixes { get; set; }
[XmlArray("objects", Order = 1)]
[XmlArrayItem(ElementName = "object", Type = typeof(ObjectDto), IsNullable = false)]
public ObjectDto[] Objects { get; set; }
[XmlArray("objects", Order = 2)]
[XmlArrayItem(ElementName = "object", Type = typeof(ObjectDto), IsNullable = false)]
public ObjectDto[] AnotherObjects { get; set; }
}
public class PrefixDto
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlText]
public string Value { get; set; }
}
public class ObjectDto
{
[XmlElement("User")]
public UserDto User { get; set; }
}
[Serializable]
public class UserDto
{
[XmlElement("familyName")]
public string FamilyName { get; set; }
[XmlElement("givenName")]
public string GivenName { get; set; }
}
问题是 - 这个模型类的序列化工作正常,但是在反序列化时,属性AnotherObjects 始终为空。另一个奇怪的事情 - 属性Objects(在类UserProfileDto中)填充了来自最后一个元素<object>的数据。
请帮忙处理这个反序列化。
【问题讨论】:
-
如果你有同名的元素,但它们背后的对象不同,你可以使用你自己的序列化/反序列化方法。使用 XElement 可以帮助您。
-
你提交的xml内容相同。所以你的问题没有意义。显示不同内容的xml,然后我们再谈。
-
亚历山大,xml 是正确的。我需要反序列化这个 xml。此 xml 文档表示前缀列表和 2 个相同对象的列表。挑战在于
的 2 个标签具有不同的含义,例如第一个标签 表示常规用户列表,第二个标签 - 组管理员列表
标签: c# xml xml-deserialization