我目前正在第一次使用C#进行序列化,而我正在使用XmlSerializer类,但我遇到了一个问题。我有两个引用彼此的类,这在序列化时会导致错误。
该项目是一个类图绘制程序。每个类都有一个指向或来自的箭头列表:
public List<UMLArrow> arrowlist;
每支箭都有一个开始和结束类:
public UMLClass startingClass;
public UMLClass endClass;
我认为当我尝试序列化时,由于这个问题,我进入了一个无限循环:
<UMLClass>
<List<UMLArrow> >
<UMLClass>
<List<UMLArrow> >
...
<List<UMLArrow> >
</UMLClass>
</List<UMLArrow>>
<UMLClass>
有没有人知道这方面的解决方案?
答案 0 :(得分:2)
我猜你已经实现了自己的序列化方法。要实现循环依赖的序列化,您需要做的是为每个对象的表示添加一个id,并跟踪序列化的对象。序列化对象时,检查它是否已经序列化。如果是,则只需序列化对象的引用及其id。
答案 1 :(得分:2)
XmlSerializer
不支持循环引用。你需要使用一个序列化器。 DataContractSerializer
(如果使用preserveObjectReferences = true
初始化)或NetDataContractSerializer
支持它,因此您应该考虑更改您使用的序列化程序。