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

前端之家收集整理的这篇文章主要介绍了.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。

猜你在找的XML相关文章