2

私は現在、初めて C# でシリアル化に取り組んでおり、XmlSerializer クラスを使用していますが、問題が発生しました。相互に参照する 2 つのクラスがあり、シリアライズ時にエラーが発生します。

このプロジェクトは、クラス図描画用のプログラムです。各クラスには、それを指す、またはそこから向かう矢印のリストがあります。

public List<UMLArrow> arrowlist;

そして、すべての矢印には開始クラスと終了クラスがあります。

public UMLClass startingClass;
public UMLClass endClass;

これをシリアル化しようとすると、この問題が原因で無限ループに陥ることがわかりました。

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

誰もこれに対する解決策を知っていますか?

4

2 に答える 2

2

XmlSerializer循環参照をサポートしていません。そうするシリアライザーを使用する必要があります。(DataContractSerializerで初期化されている場合preserveObjectReferences = true)またはNetDataContractSerializerdoはそれをサポートしているため、使用するシリアライザーの変更を検討する必要があります。

于 2012-11-24T22:54:35.620 に答える
2

独自のシリアル化メソッドを実装したと思います。循環依存関係のシリアル化を実装するために必要なことは、各オブジェクトの表現に ID を追加し、シリアル化されたオブジェクトを追跡することです。オブジェクトをシリアル化するときは、既にシリアル化されているかどうかを確認します。はいの場合は、オブジェクトへの参照をその ID でシリアル化します。

于 2012-11-24T22:30:37.443 に答える