同じオブジェクトが複数のパスで参照されるオブジェクトグラフをシリアライズするためにバイナリフォーマッタを使用しています。しかし、シリアライゼーション中に、特定のオブジェクトのGetObjectDataが何度も呼び出されます。簡単なオブジェクトを使ってテストサンプルを試してみると、それはオブジェクトグラフで発生する回数とは関係なく一度だけ呼び出されます。同じオブジェクトが複数回訪問され、シリアル化中に.GetObjectデータがSerializableオブジェクトで呼び出される理由はありますか?これが起こると、逆シリアル化はFixUpエラーで失敗するようです。.NETバイナリフォーマッタがGetObjectDataを複数回呼び出す理由はありますか?
2
A
答えて
3
問題と解決方法が見つかりました。 .NETのバグだった。循環参照があり、サロゲートが使用されている場合、直列化復元中に問題が発生する可能性があります。内部直列化サロゲートをFormatterServices.GetSurrogateForCyclicalReference()でラップすることを修正しました。現在は動作しているようですが、その他の問題を除外するために、より多くのユースケースを試していきます。誰かを助け、時間を節約できることを願っています。
関連する問題
- 1. Tapestry5でonPassivate()メソッドが複数回呼び出された理由
- 2. DataContractJsonSerializer; ISerializable GetObjectData .NETで呼び出されますが、モノではありません
- 3. シリアル化でGetObjectDataを呼び出す
- 4. Crashlytics.startを複数回呼び出す必要がありますか?
- 5. すべてのWCFがAsyncを呼び出す理由はありますか?
- 6. ToList()を複数回呼び出すとパフォーマンスに影響はありますか?
- 7. Watsonのテキストへのスピーチが複数回呼び出される理由
- 8. 関数を呼び出す複数回
- 9. doGet()関数を呼び出す理由
- 10. スクロールイベントは複数回発生しますが、スクロールごとに1回呼び出す必要があります
- 11. ガベージコレクタを手動で呼び出す理由はありますか?
- 12. 毎回FacebookSdk.sdkInitialize()を呼び出す必要がありますか?
- 13. コンストラクターを呼び出す複数回
- 14. mallocを複数回呼び出す
- 15. angular2ルートガードを複数回呼び出す
- 16. deleteRowsAtIndexPathsを複数回呼び出す
- 17. Gradle buildConfigを複数回呼び出す
- 18. BeforeShowDayを複数回呼び出す
- 19. google.script.run.withSuccessHandlerを複数回呼び出す
- 20. ReactDOM.renderを複数回呼び出す
- 21. kbhitと複数の関数呼び出しがあります
- 22. Response.FilterはWrite()を複数回呼び出しますか?
- 23. メソッドの呼び出しが複数回
- 24. この関数呼び出しがうまくいかない理由はありますか?
- 25. Node.jsで関数が複数回呼び出されます
- 26. 複数のJQuery関数がCodebehindから呼び出されない理由
- 27. devexpressでasp .netのクライアント側のコールバック関数を複数回呼び出す
- 28. GetStringAsyncを複数回呼び出すより効果的な方法はありますか?
- 29. SwitchPreferencesはonPreferenceChange()メソッドを複数回呼び出します
- 30. ZODBトランザクションコミットは__getstate__を複数回呼び出します
あなたのコードを教えてもらえますか?あなたはただ1つのオブジェクトグラフをシリアライズしていますか?つまり、 'Serialize()'を一度呼び出すだけですか? "FixUpエラー"とは何ですか? – svick
コードベースが共有するのはかなり巨大であることをお詫び申し上げます。シリアライズされているオブジェクトではなく、他のオブジェクトと問題のオブジェクトタイプを持つハッシュテーブルは、複数のパスから参照される可能性があります。逆シリアル化中にスローされた例外は、 "System.Runtime.Serialization.SerializationException:ID 91のオブジェクトがフィックスアップで参照されましたが、存在しません。" – sraj
私はコードベース全体を共有するように求めていません。しかし、問題を再現するために使用できるコードを共有できますか? – svick