#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);
Вот исходный код.