同じオブジェクトが複数のパスで参照されるオブジェクトグラフをシリアライズするためにバイナリフォーマッタを使用しています。しかし、シリアライゼーション中に、特定のオブジェクトのGetObjectDataが何度も呼び出されます。簡単なオブジェクトを使ってテストサンプルを試してみると、それはオブジェクトグラフで発生する回数とは関係なく一度だけ呼び出されます。同じオブジェクトが複数回訪問され、シリアル化中に.GetObjectデータがSerializableオブジェクトで呼び出される理由はありますか?これが起こると、逆シリアル化はFixUpエラーで失敗するようです。.NETバイナリフォーマッタがGetObjectDataを複数回呼び出す理由はありますか?
2
A
答えて
3
問題と解決方法が見つかりました。 .NETのバグだった。循環参照があり、サロゲートが使用されている場合、直列化復元中に問題が発生する可能性があります。内部直列化サロゲートをFormatterServices.GetSurrogateForCyclicalReference()でラップすることを修正しました。現在は動作しているようですが、その他の問題を除外するために、より多くのユースケースを試していきます。誰かを助け、時間を節約できることを願っています。
関連する問題
- 1. Tapestry5でonPassivate()メソッドが複数回呼び出された理由
- 2. Crashlytics.startを複数回呼び出す必要がありますか?
- 3. すべてのWCFがAsyncを呼び出す理由はありますか?
- 4. シリアル化でGetObjectDataを呼び出す
- 5. Gradle buildConfigを複数回呼び出す
- 6. コンストラクターを呼び出す複数回
- 7. deleteRowsAtIndexPathsを複数回呼び出す
- 8. Response.FilterはWrite()を複数回呼び出しますか?
- 9. この関数呼び出しがうまくいかない理由はありますか?
- 10. 複数のJQuery関数がCodebehindから呼び出されない理由
- 11. ZODBトランザクションコミットは__getstate__を複数回呼び出します
- 12. SwitchPreferencesはonPreferenceChange()メソッドを複数回呼び出します
- 13. DataBindingCompleteが複数回呼び出されています
- 14. AndroidアプリケーションクラスメソッドonCreateが複数回呼び出されています
- 15. after_commitコールバックが複数回呼び出されています
- 16. jquery .clickが複数回呼び出されています
- 17. JButtonでActionPerformedが複数回呼び出されましたか?
- 18. 複数のCTEを同じクエリで複数回呼び出す
- 19. JQuery setTimeoutは常に関数を複数回呼び出す
- 20. Jquery関数が複数回呼び出す
- 21. カスタムカーソルアダプタがbindViewを複数回呼び出す
- 22. コンストラクタでsuper()を呼び出す理由
- 23. ExecutorServiceでshutdown()を呼び出す理由
- 24. このコードが動作する理由関数呼び出し
- 25. 複数のSQlCommand.ExecuteReaderを呼び出すか、datareader.NextResult()を使用して1回呼び出しますか?
- 26. onScrollイベントが複数回呼び出されました
- 27. NSXMLParser didEndElementとdidStartElementが複数回呼び出されました
- 28. Glassfish filter initが複数回呼び出されました
- 29. Wordpressのinitフックが複数回呼び出されました
- 30. jqueryが複数回呼び出されました。
あなたのコードを教えてもらえますか?あなたはただ1つのオブジェクトグラフをシリアライズしていますか?つまり、 'Serialize()'を一度呼び出すだけですか? "FixUpエラー"とは何ですか? – svick
コードベースが共有するのはかなり巨大であることをお詫び申し上げます。シリアライズされているオブジェクトではなく、他のオブジェクトと問題のオブジェクトタイプを持つハッシュテーブルは、複数のパスから参照される可能性があります。逆シリアル化中にスローされた例外は、 "System.Runtime.Serialization.SerializationException:ID 91のオブジェクトがフィックスアップで参照されましたが、存在しません。" – sraj
私はコードベース全体を共有するように求めていません。しかし、問題を再現するために使用できるコードを共有できますか? – svick