Я пытаюсь сериализовать и десериализовать пользовательский класс с помощью сериализации контракта данных. Сериализация работает отлично. Однако при десериализации у меня возникает проблема из-за этого (источник):
Конструкторы не вызываются при десериализации объектов.
Дело в том, что я делаю небольшую инициализацию в конструкторе. Это включает в себя некоторые структуры данных.
Без вызова конструктора структуры данных будут null
, а вызовы функций установки во время десериализации завершатся ошибкой.
Как я могу вызвать конструктор или инициализировать объект до или во время процесса десериализации, прежде чем будет использован какой-либо метод доступа?
Есть несколько методов, которые я могу объявить как обратные вызовы через атрибуты, например этот (тот же источник):
// This method is called after the object
// is completely deserialized. Use it instead of the
// constructror.
[OnDeserialized]
void OnDeserialized(StreamingContext context)
{
fullName = firstName + " " + lastName;
}
Но похоже, что все они запускаются после десериализации.
Нужно ли переходить на XML-сериализацию?
OnDeserialized
, где вы можете инициализировать свои поля. Ничто не могло получить доступ к полям/свойствам до этого. - person Sriram Sakthivel   schedule 07.01.2016