Проблема прямой совместимости DataContractSerializer - PullRequest
1 голос
/ 22 августа 2011

Я использую DataContractSerializer для хранения объекта моего собственного класса для сохранения пользовательских настроек. Класс UserSettings использует некоторые другие объекты разных типов данных. Я добавляю все эти типы в параметр KnownTypes объекта DataContractSerializer, который работает просто отлично. Но у меня есть проблемы с прямой совместимостью. Если я ввожу новое свойство в класс UserSerrings, используя новый тип данных, это также работает в новой версии моей программы. Но старая версия выдает исключение, говорящее, что файл XML не может быть десериализован, потому что тип данных не находится в массиве KnownTypes. Я просто хочу игнорировать эти типы, потому что они все равно не используются в старой версии. Как я могу добиться этого, чтобы старая версия могла читать и записывать XML-файл, игнорируя эти неизвестные свойства / типы?

1 Ответ

2 голосов
/ 26 апреля 2012

Это именно тот сценарий, для которого был разработан IExtensibleDataObject (данные расширения)!Идея состоит в том, что если версия контракта v1 будет украшена интерфейсом данных расширения, он будет автоматически игнорировать, хранить и передавать данные из будущих версий контракта данных, включая будущие неизвестные типы, без каких-либо проблем.

Я бы порекомендовал следующие ресурсы, чтобы узнать больше об этой функции и узнать, как реализовать ее для вашей конкретной ситуации:

Согласованные на передачу данных контракты

Управление версиями контракта данных

Образец IExtensibleDataObject

И даже более подробное руководство по управлению версиями контракта данных ...

...