我最近一直在读关于序列化。我读过,当我使用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。