この例外は、ProtoBuf でシリアル化するためのテスト アプリケーションでスローされています。
SceneryFile:temp.ad2
ProtoBuf.ProtoException: Possible recursion detected (offset: 2 level(s): SceneryFile: temp.ad2
at ProtoBuf.ProtoWriter.CheckRecursionStackAndPush(Object instance( in c:\protbuf-net\protobuf-net\ProtoWriter.sc:line321
これらの他の質問を見つけました
Protobuf-net の再帰の可能性が検出されました: 子と親をシリアル化します
ツリーの深さはわずか 4 です。変更できるかどうかを調べましたProtoBuf.ProtoWriter.RecursionCheckDepth
が、コードでそれを行う方法が見つかりませんでした。
最後の質問に対する Marc の回答に基づいて、参照によって同じオブジェクト インスタンスが再度参照されていることを意味していると思います。つまり、私の場合、SceneryFile はそれ自体を参照しているか、別の場所で参照されています (実際には基本クラスです)。これは、すべての直接の子がそれへの参照を保持しているという意味です。ここでの答えは、これが問題である可能性があることを示唆しているようです:
上記の 2 番目の質問の調査結果に基づいて、親をシリアル化から削除したところ、この問題は停止しました。
シリアライゼーションのように親への参照を保持できるようにする方法はありますか、それとも親にインデックスを使用し、逆コンパイル時にグラフを再構築する必要がありますか?
ありがとう