.net – 什么是对象图,如何序列化一个

我最近一直在读关于序列化。我读过,当我使用XmlSerialization我不能序列化对象图。什么是对象图,为什么我不能序列化它简单?
对象图不是单个对象,而是一组相关对象。举个简单的例子,考虑:
public class Node {
    public string Name {...}
    public Node Parent {...}
    public List<Node> Children {...}
}

其中每个孩子知道父母(并且父母知道孩子)。

问题是,xml是一个基于对象属性的树…并且它只是走他们 – 即与简单的父/子:

> A(知道B是它的孩子)

> B(知道A是其父代)

将序列化为:

<Node>
  <Name>A</Name>
  <!-- no Parent as A is the top node,so null -->
  <Children>
     <Node>
        <Name>B</Name>
        <Parent>
           <Node>
              <Name>A</Name>
              *** boom ***

你可以看到我们回到了A,所以我们现在在一个无尽的循环。

XmlSerializer可以序列化数据树,但不能完整的图。您可以标记要忽略的属性,例如:

[XmlIgnore]
public Node Parent {...}

现在它会工作,但我们将不得不解决家长后。

相比之下,其他一些序列化程序可以处理图形(DataContractSerializer可以按需)。它通过跟踪一个唯一的键跟踪对象 – 但是输出不是你期望从普通的XML。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念