1

私には2つのプロジェクトがあります:A/B。プロジェクトAは、B(ロジックアイテム)のオブジェクトにバインドされているすべてのWinFormを含むプロジェクトです。

AにはタイプA.Formのオブジェクトがあります

BにはタイプB.SerializerB.Logicのオブジェクトがあります

ここで、AにはBへの参照があり(ただし、BにはAへの参照はありません)、A.FormにはタイプB.Logicのメンバー変数が含まれています。ある時点で、すべてのデータがB.Logicに格納されたら、B.Serializer(B.Logic)を呼び出して、このオブジェクトをディスクに保存しようとします。

この時点で、A.Fromがシリアル化可能としてマークされていないというエラーがシリアル化時に発生します。

しかし、プロジェクトBにはAへの参照がまったくなく、A.Formを参照するメンバーがSOMEHOWにあったとしても、コンパイルすらすべきではありません。

4

1 に答える 1

1

ここでの通常の原因は、イベント(in B.Logic)やその他の外部オブジェクトへの逆参照などです。フィールドをシリアル化しないものとしてマークできます。

    [NonSerialized]
    private SomeType foo;

またはフィールドのようなイベントで:

    [field: NonSerialized]
    public event EventHandler Bar;

余談ですが、説明から、あなたが使用していると思いますBinaryFormatter; 個人的に、私はこれについて予約を持っています-それは非常に壊れやすいです。実装に固有ではないものを提案します。XmlSerializerprotobuf-netJson.NETなど。

于 2009-05-06T21:24:27.690 に答える