Некоторые сведения о моей проблеме:
У меня есть много классов, которые реализуют ISerializable
и предназначены для сериализации с использованием явных методов BinaryFormatter
:
.ctor(SerializationInfo info, StreamingContext context)
и void GetObjectData(SerializationInfo info, StreamingContext context)
Недавно я обнаружил, что BinaryFormatter
не всегда вызывает конструктор при десериализации объекта.
Предположительно, BinaryFormatter
должен копировать бит объекта за битом в память, и поэтому не вызывает конструктор объекта «Уже сконструирован».
Это не работает для меня: мои личные члены всегда имеют нулевые ссылки, когда вызывается OnDeserialized
и конструктор не запускается.
Это могло бы быть решено, если бы я все еще мог получить сериализованные данные, собранные GetObjectData
, но я не могу найти ничего, кроме конструктора, который дает мне доступ к объекту SerializationInfo
.
Мой вопрос, тогда:
Есть ли способ, кроме .ctor(SerializationInfo info, StreamingContext context)
, извлечь значения, которые были собраны во время void GetObjectData(SerializationInfo info, StreamingContext context)
?
Или:
Любая подсказка, как BinaryFormatter
решает, вызывать конструктор или нет? Если бы я мог просто заставить BinaryFormatter
всегда использовать конструктор, я считаю, что моя проблема была бы решена.