考虑以下 XML:
<?xml version="1.0" encoding="utf-8"?>
<treelist id="foo" displayname="display">
<treelink id="link" />
</treelist>
我设置了以下代码:
private static void Main(string[] args)
{
StreamReader result = File.OpenText(@"test.xml");
var xmlTextReader = new XmlTextReader(result.BaseStream, XmlNodeType.Document, null);
XDocument load = XDocument.Load(xmlTextReader);
var xmlSerializer = new XmlSerializer(typeof (TreeList));
var foo = (TreeList) xmlSerializer.Deserialize(load.CreateReader());
}
这些是我的实体:
[Serializable]
[XmlRoot("treelink")]
public class TreeLink
{
[XmlAttribute("id")]
public string Id { get; set; }
}
[Serializable]
[XmlRoot("treelist")]
public class TreeList
{
[XmlAttribute("id")]
public string Id { get; set; }
[XmlAttribute("displayname")]
public string DisplayName { get; set; }
[XmlArray("treelist")]
[XmlArrayItem("treelist", typeof (TreeLink))]
public TreeLink[] TreeLinks { get; set; }
}
但是我无法反序列化树链接对象,在foo
TreeLinks 始终保持为空。
我在这里做错了什么?
Use XmlElement
在树链接的“列表”上。
[XmlElement("treelink")]
public TreeLink[] TreeLinks { get; set; }
Using [XmlArray]
and [XmlArrayItem]
暗示您希望父类中的树链接位于其自己的包装容器中 - 换句话说,它需要如下所示的 xml:
<treelist id="foo" displayname="display">
<treelist>
<treelist id="link" />
</treelist>
</treelist>
这里的技巧总是从另一个方向开始。标记您的类以进行序列化,然后序列化您的类型的实例并查看它生成的 xml。然后您可以对其进行调整,直到它看起来像您最终想要反序列化的 xml。这比尝试猜测 xml 未正确反序列化的原因容易得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)