プロジェクトでシリアル化する構造は次のとおりです。
[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
.OnDeserialized
xmlof3rdPartyData
最近、特定の不明な状況(これまで、問題を最初に報告したクライアントからのシリアル化されたデータファイルを使用してのみ問題を再現できた)で、myメソッド.OnSerializing
と.OnSerialized
メソッドが呼び出されるだけの問題に遭遇しました57 / 160回(160はD
構造内のオブジェクトの総数)を使用BinaryFormatter
してファイルにシリアル化すると、103D
個のオブジェクトがにxmlOf3rdPartyData
設定されたままになりnull
ます。ここで説明する方法(基本的にはファイルへのシリアル化に使用する方法と同じです)を使用して構造を複製すると、 .OnSerializing
/についても同じ結果が表示されます.OnSerialized
が、私の.OnDeserialized
方法は完全な160回呼び出されます。
このコードは何ヶ月も問題なく使用されており(少なくとも私が知る限り)、なぜこれが以前ではなく今起こっているのかを突き止めようとしています。デバッグ中に最初のチャンスの例外は表示されません。また、メソッドの先頭にあるブレークポイントが57回を超えてヒットしていません。なぜこれが発生するのか/それを修正する方法についてのアイデアはありますか?