Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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#:具有循环链接的节点的xml序列化_C#_Xml_Serialization_Hyperlink_Cyclic - Fatal编程技术网

C#:具有循环链接的节点的xml序列化

C#:具有循环链接的节点的xml序列化,c#,xml,serialization,hyperlink,cyclic,C#,Xml,Serialization,Hyperlink,Cyclic,我有这样一个类节点: class Node { IEnumerable<Node> inputs; } 类节点{ i可数输入; } 它基本上定义了一个简单的图形。 我想将我的图形序列化为一种人类可读的形式,所以通常我会说xml将是一种方式。 但XML并没有考虑到循环依赖关系:) 那么,对我的图形进行序列化的最佳方式是什么呢 我可以想出几个办法: 抛弃XML,创建我自己的格式 使用XML,用唯一ID标记每个节点,将连接列表与节点分开存储,并在加载后解析 但我认为其他人以

我有这样一个类节点:

class Node {
    IEnumerable<Node> inputs;
}
类节点{
i可数输入;
}
它基本上定义了一个简单的图形。 我想将我的图形序列化为一种人类可读的形式,所以通常我会说xml将是一种方式。 但XML并没有考虑到循环依赖关系:)

那么,对我的图形进行序列化的最佳方式是什么呢

我可以想出几个办法:

  • 抛弃XML,创建我自己的格式
  • 使用XML,用唯一ID标记每个节点,将连接列表与节点分开存储,并在加载后解析
但我认为其他人以前肯定也有过同样的问题,所以可能有更好的选择。
有人知道可靠的方法吗?

对于xml,我会使用id方法(将DTO模型更改为非循环)


注意,可以通过为重载构造函数中的
preserveObjectReferences
选项传入
true
来自动支持循环对象图;它不会像XmlSerializer输出那样简单,但仍然可读。

如果切换到WCF DataContractSerializer,可以保留对象引用(在3.5 SP 1及更高版本中)

索米写得很好

[DataContract(IsReference=true)]