Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何反序列化子对象直接位于根目录中的对象列表_C#_.net_Xml_System.xml - Fatal编程技术网

C# 如何反序列化子对象直接位于根目录中的对象列表

C# 如何反序列化子对象直接位于根目录中的对象列表,c#,.net,xml,system.xml,C#,.net,Xml,System.xml,考虑以下XML: <?xml version="1.0" encoding="utf-8"?> <treelist id="foo" displayname="display"> <treelink id="link" /> </treelist> 这些是我的实体: [Serializable] [XmlRoot("treelink&

考虑以下XML:

<?xml version="1.0" encoding="utf-8"?>
<treelist id="foo" displayname="display">
  <treelink id="link" />
</treelist>
这些是我的实体:

[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; }
}
但是,我无法反序列化treelink对象,在
foo
中,treelink始终保持为空


我做错了什么?

在树链接的“列表”中使用
xmlement

[XmlElement("treelink")]
public TreeLink[] TreeLinks { get; set; }
使用
[XmlArray]
[XmlArrayItem]
意味着您希望父类中的树链接位于它们自己的包装容器中-换句话说,它需要如下xml:

<treelist id="foo" displayname="display">
  <treelist>
    <treelist id="link" />
  </treelist>
</treelist>


这里的诀窍总是从另一个方向开始。标记要序列化的类,然后序列化类型的实例,并查看它生成的xml。然后可以调整它,直到它看起来像最终要反序列化的xml。这比猜测xml未正确反序列化的原因要容易得多。

不知道这么容易!谢谢
<treelist id="foo" displayname="display">
  <treelist>
    <treelist id="link" />
  </treelist>
</treelist>