Методы OnSerializing/OnSerialized вызываются не всегда

Вот структура, которую я сериализую в своем проекте:

[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 раз. Любые идеи о том, почему это может произойти / как это исправить?

9
задан Community 23 May 2017 в 12:04
поделиться