2010-02-04 2 views
1

Недавно я столкнулся с сценарием, когда один из наших разработчиков добавил объект к нашему контракту с данными, который не был помечен как элемент данных. Мы используем DataContractSerializer для хранения файла конфигурации для части оборудования, которое мы контролируем. Очевидно, операция сериализации не удалась.Как сделать DataContractSerializer более безопасным?

Основная проблема, которая была обнаружена, заключалась в том, что файл конфигурации был уничтожен во время процесса. Кто-нибудь знает, как убедиться, что граф объекта будет сериализован, прежде чем пытаться его сериализовать?

Трассировка стека из исключения сериализации не выполняется при вызове XmlObjectSerializerContext.CheckIfTypeSerializable (..) Мне интересно, есть ли что-то подобное, что я могу использовать до того, как попытаться выполнить сериализацию.

Я хотел бы избежать того, чтобы поток графа в память, а затем в файл, но я предполагаю, что это будет работать ...

Есть предложения?

ответ

0

Скотт, я думаю, вы имеете в виду, что сериализация преуспела, но сериализация * de * не удалась. Если вы добавите дополнительный элемент данных, но забыли аннотировать, сериализатор просто проигнорировал бы его во время сериализации. Кроме того, если он видит дополнительный элемент во время десериализации, он будет метаться, если вам требуется строгое действие схемы или требуется, чтобы член присутствовал; но в противном случае он просто не будет анализировать это значение и двигаться дальше.

Есть несколько способов справиться с этим - с помощью IExtensibleDataObject, требующие DataMembers, используя суррогаты и т.д. См http://msdn.microsoft.com/en-us/library/ms731138.aspx [Data Contract Versioning] и [http://msdn.microsoft.com/en-us/library/ms731083.aspx Прогнозные Совместимые контракты данных] для более конкретных указаний.

Надеюсь, это поможет!

+0

Это была сериализация, которая не удалась. Приложение попыталось сохранить обновление в файле конфигурации. Это не удалось, но не до того, как вы повредили файл на диске. –

Смежные вопросы