Подключитесь к OnDeserializing для XmlSerializer - PullRequest
2 голосов
/ 07 марта 2011

В противном случае, чем указано в этом сообщении Я хотел бы действовать непосредственно перед тем, как десериализация XmlSerializer начнет (а не после завершения десериализации)

Справочная информация: у меня есть baseClass, который реализует INotifyPropertyChanged,Этот BaseClass хранится в виде XML в базе данных и после извлечения десериализуется в экземпляр объекта.Десериализация выполняет установщики этого класса, где происходит моя ChangeNotification.На централизованном обработчике для изменения изменений я устанавливаю статус объекта и отслеживаю стеки для отмены изменений.Очевидно, я не хочу, чтобы они запускались при десериализации.

Любые идеи будут очень кстати!

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

XmlSerializer не поддерживает обратные вызовы сериализации. Одним из вариантов является использование IXmlSerializable, но это много работы. В некоторых простых случаях DataContractSerializer может быть жизнеспособным вариантом; он поддерживает cllbacks, но не поддерживает столько сценариев XML (в первую очередь, без атрибутов).

Вам может не повезти, и в этом случае рассмотрите отдельный DTO и тип домена. Например, вы можете десериализовать в FooDto, а затем скопировать значения в Foo, указав вручную, что это происходит через сериализацию.

1 голос
/ 08 марта 2011

Как прокомментировал решение Марка. Самый прагматичный способ сейчас (я разрабатываю доказательство концепции для большого куска сложной функциональности) - по умолчанию объект после его десериализации с простой публичной пустотой. В этом методе я могу очистить стек отмены и установить статус объекта неизменным.

Если у меня появятся лучшие идеи, я опубликую их здесь.

...