【发布时间】:2016-01-13 21:35:12
【问题描述】:
晚上好,我有以下 XML:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<project xmlns="">
<title>MyProject</title>
<nodes>
<node>
<name>base</name>
<class>BaseNode</class>
</node>
<node>
<name>detail</name>
<class>DetailNode</class>
</node>
...
</nodes>
</project>
...我希望将其反序列化为以下对象结构,以便 Project 包含一个“标题”和一个 NodeCollection(其中又包含多个 Node 元素):
[DataContract(Name = "project")]
class Project
{
[DataMember(Name = "title")]
public string Title { get; set; }
[DataMember(Name = "nodes")]
public NodeCollection Nodes { get; set; }
}
[CollectionDataContract(Name = "nodes", ItemName = "node")]
class NodeCollection : List<Node>
{
}
[DataContract(Name = "node")]
class Node
{
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "class")]
public string Class { get; set; }
}
使用此架构,反序列化完成时不会出错,返回预期的Project 对象,但是:
- 项目“Title”已正确反序列化(其值为“MyProject”),
- 项目“节点”不是(空的)。
Project 对象的 Title 属性设置为预期值,但 NodeCollection 始终为空。事实上,它甚至都没有初始化:
对象引用未设置为对象的实例
出于某种奇怪的原因,反序列化器“无法识别任何节点”。我尝试添加KnownType 属性,没有成功。
我做错了什么?
【问题讨论】:
标签: c# xml serialization datacontract