プロジェクトでシリアル化する構造は次のとおりです。
[Serializable]
class A : List<B> //root object being serialized
[Serializable]
class B
+ [A few serializable fields]
+ C customList
[Serializable]
class C : List<D>
[Serializable]
class D
+ [several serializable fields]
|
+ [NonSerialized] nonserializable3rdPartyClass data
+ string xmlOf3rdPartyData
|
+ [OnSerializing]
+ private void OnSerializing(StreamingContext context)
|
+ [OnSerialized]
+ private void OnSerialized(StreamingContext context)
|
+ [OnDeserialized]
+ private void OnDeserialized(StreamingContext context)
はnonserializable3rdPartyClass、としてマークされていませんが、XML文字列をに格納および取得するためにそれぞれmyおよびmethodsで使用するメソッドを提供し[Serializable]ます。.ToXml.FromXml.OnSerializing.OnDeserializedxmlof3rdPartyData
最近、特定の不明な状況(これまで、問題を最初に報告したクライアントからのシリアル化されたデータファイルを使用してのみ問題を再現できた)で、myメソッド.OnSerializingと.OnSerializedメソッドが呼び出されるだけの問題に遭遇しました57 / 160回(160はD構造内のオブジェクトの総数)を使用BinaryFormatterしてファイルにシリアル化すると、103D個のオブジェクトがにxmlOf3rdPartyData設定されたままになりnullます。ここで説明する方法(基本的にはファイルへのシリアル化に使用する方法と同じです)を使用して構造を複製すると、 .OnSerializing/についても同じ結果が表示されます.OnSerializedが、私の.OnDeserialized方法は完全な160回呼び出されます。
このコードは何ヶ月も問題なく使用されており(少なくとも私が知る限り)、なぜこれが以前ではなく今起こっているのかを突き止めようとしています。デバッグ中に最初のチャンスの例外は表示されません。また、メソッドの先頭にあるブレークポイントが57回を超えてヒットしていません。なぜこれが発生するのか/それを修正する方法についてのアイデアはありますか?