Десериализующий объект

#c#

#c#

Вопрос:

В коде C # при десериализации объекта с помощью настроенного класса десериализации, который проверяет список безопасных дериализуемых типов и возвращает тип, подлежащий десериализации, даже если я передаю нулевое значение типу, подлежащему десериализации, все равно мой класс десериализации возвращает правильный десериализованный тип объекта.

ниже приведен фрагмент кода —

 BinaryFormatter formatter = new BinaryFormatter();

formatter.Binder = new SafeSerializeDeserializeData();

object temp = formatter.Deserialize(ReadStream);
  

Я не уверен, почему temp всегда имеет допустимый тип, даже если я возвращаю null из SafeSerializeDeserializeData класса. Не знаком с классом десериализации или концепциями.

Комментарии:

1. Что вы подразумеваете под допустимым типом?

2. Под допустимым типом я подразумеваю тип, в котором ожидается десериализация объекта. В моем случае это ‘TcpExChannelData’.

3. Потому что это то, что вы сериализовали. object Переменная может содержать объекты любого типа, и, как правило, вы в любом случае приведете свой десериализованный объект к ожидаемому типу. Вероятно, что процесс сериализации сохраняет метаданные объекта, поэтому при десериализации object переменная уже будет содержать правильный тип. Смотрите learn.microsoft.com/en-us/dotnet/api /… . для примеров кода.

4.Какой тип вы ожидаете temp иметь и почему?

Ответ №1:

даже если я верну null из класса SafeSerializeDeserializeData

Если вы вернете значение null, десериализатор будет использовать запасной тип.

 if (m_binder != null)
    type = m_binder.BindToType(assemblyString, typeString);
if ((object)type == null)
    type= FastBindToType(assemblyString, typeString);
  

Вот исходный код.