Явная сериализация BinaryFormatter, когда конструктор не вызывается - PullRequest
2 голосов
/ 06 января 2012

Некоторые сведения о моей проблеме: У меня есть много классов, которые реализуют 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 всегда использовать конструктор, я считаю, что моя проблема была бы решена.

...