Вот структура, которую я сериализую в своем проекте:
[Serializable]
class A : List //root object being serialized
[Serializable]
class B
+ [A few serializable fields]
+ C customList
[Serializable]
class C : List
[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
, хотя и не помеченный как [Serializable]
, предоставляет методы .ToXml
и .FromXml
, которые я использую в своих методах .OnSerializing
и .OnDeserialized
соответственно для сохранения и извлечения строки XML в xmlof3rdPartyData
.
Недавно я столкнулся с проблемой, когда при определенных неизвестных обстоятельствах (мне пока удалось воспроизвести проблему только с помощью сериализованного файла данных от клиента, который первым сообщил о проблеме ), мой .OnSerializing
и .OnSerialized
методы вызываются только 57/160 раз (, где 160 — это общее количество D
объектов в структуре )при использовании BinaryFormatter
для сериализации в файл, в результате чего у меня остается 103 D
объектов с xmlOf3rdPartyData
установленным на null
. При клонировании структуры методом, описанным здесь(что в основном то же самое, что я использую для сериализации в файл ), я вижу те же результаты для .OnSerializing
/.OnSerialized
, но мой метод .OnDeserialized
вызывается полные 160 раз.
Этот фрагмент кода использовался в течение нескольких месяцев без проблем (, по крайней мере, насколько я знаю ), и я все еще пытаюсь определить, почему это происходит сейчас, а не раньше. Я не вижу никаких исключений первого шанса во время отладки, и мои точки останова в начале методов просто не срабатывают более 57 раз. Любые идеи о том, почему это может произойти / как это исправить?