Создание объекта управления при десериализации - PullRequest
3 голосов
/ 01 сентября 2010

Я хотел бы контролировать создание объектов типа, который обычно не сериализуем во время десериализации, используя NetDataContractSerializer (или любой другой сериализатор, который я предполагаю).Используя пользовательский SerializationBinder, я могу управлять созданным типом и использовать пользовательские ISurrogateSelector и ISerializationSurrogate, чтобы контролировать, как устанавливается состояние объекта.

Что я не могу сделать, так это создать объект сам, чтобы разрешить использованиевнедрение зависимости или что-то.Объект, вызывающий проблемы, находится внутри графа объектов, поэтому я не могу его редактировать перед сериализацией.

Есть ли способ, позволяющий моему коду создавать десериализованный объект?

(Для фона я пишу пользовательское хранилище экземпляров персистентности WF4 на основе XmlWorkflowInstanceStore в примерах WF. Я хочу создать рабочие процессы, которые имеют переменные, которые являются интерфейсами ... и конкретные типы не могут быть созданы напрямую.Единственный пример, который я могу найти с пользовательским постоянством, и он использует NetDataContractSerializer для сериализации состояния рабочего процесса.)

Ответы [ 2 ]

0 голосов
/ 09 апреля 2015

Я знаю, что этот вопрос старый, но вы искали GetSafeUninitializedObject?

0 голосов
/ 11 августа 2011

Я постоянно сталкиваюсь с этой проблемой. Обычно я сам реализую ISerializable и устанавливаю все зависимости с помощью метода (названного, например, SetDependencies) - это не совсем то, что вам может понадобиться (потому что вы должны вызывать его после десериализации), но я пока не нашел лучшего способа пробовал АОП но все пошло противно)

...