序列化两个相互引用的对象

时间:2012-11-24 22:24:11

标签: c# xml serialization

我目前正在第一次使用C#进行序列化,而我正在使用XmlSerializer类,但我遇到了一个问题。我有两个引用彼此的类,这在序列化时会导致错误。

该项目是一个类图绘制程序。每个类都有一个指向或来自的箭头列表:

public List<UMLArrow> arrowlist;

每支箭都有一个开始和结束类:

public UMLClass startingClass;
public UMLClass endClass;

我认为当我尝试序列化时,由于这个问题,我进入了一个无限循环:

<UMLClass>
    <List<UMLArrow> >
        <UMLClass>
            <List<UMLArrow> >
                ...
            <List<UMLArrow> >
        </UMLClass>
    </List<UMLArrow>>
<UMLClass>

有没有人知道这方面的解决方案?

2 个答案:

答案 0 :(得分:2)

我猜你已经实现了自己的序列化方法。要实现循环依赖的序列化,您需要做的是为每个对象的表示添加一个id,并跟踪序列化的对象。序列化对象时,检查它是否已经序列化。如果是,则只需序列化对象的引用及其id。

答案 1 :(得分:2)

XmlSerializer不支持循环引用。你需要使用一个序列化器。 DataContractSerializer(如果使用preserveObjectReferences = true初始化)或NetDataContractSerializer支持它,因此您应该考虑更改您使用的序列化程序。