如何反序列化子项直接位于根中的对象列表

请考虑以下XML:

    

我已经设置了以下代码:

  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; } } 

但是我无法反序列化treelink对象,在foo中TreeLinks始终保持为null。

我在这做错了什么?

谢谢

在树链接的“列表”上使用XmlElement

 [XmlElement("treelink")] public TreeLink[] TreeLinks { get; set; } 

使用[XmlArray][XmlArrayItem]暗示您希望树链接在父类中的自己的包装容器中 – 换句话说,它需要像这样的xml:

      

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