C#:带有循环链接的节点的 xml 序列化
Posted
技术标签:
【中文标题】C#:带有循环链接的节点的 xml 序列化【英文标题】:C# : xml serialization of nodes with cyclic links 【发布时间】:2011-05-25 20:20:33 【问题描述】:我有一个类似这样的类节点:
class Node
IEnumerable<Node> inputs;
这基本上定义了一个简单的图形。 我想将我的图表序列化为人类可读的形式,所以通常我会说 xml 将是要走的路。 但是 XML 并没有考虑到循环依赖:)
那么 - 对我的图进行序列化的最佳方法是什么?
我能想到几个办法:
抛弃 XML,创建我自己的格式。 使用 XML,用唯一 ID 标记每个节点,将连接列表与节点分开存储并在加载后解析但我认为其他人以前一定遇到过同样的问题,所以可能有一些更好的选择。 有人知道可靠的方法吗?
【问题讨论】:
【参考方案1】:对于 xml,我会采用 id 方法(更改 DTO 模型,使其不是循环)。
注意DataContractSerializer
可以通过在重载构造函数中为preserveObjectReferences
选项传入true
来自动支持循环对象图;它不会像XmlSerializer
输出那么简单,但它仍然是可读的。
【讨论】:
【参考方案2】:如果切换到 WCF DataContractSerializer,则可以保留对象引用(在 3.5 SP 1 及更高版本中)
[DataContract(IsReference=true)]
Sowmy 写得很好here
【讨论】:
以上是关于C#:带有循环链接的节点的 xml 序列化的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# Xml.Serialization 库反序列化每个重复的 XML 节点并将其映射到对象的属性
C# xml序列化时如何去掉节点里的d2p1:type和xmlns:d2p1