Сериализация графов объектов в .NET и обновление версий кода - PullRequest
3 голосов
/ 04 июня 2010

Мне нужно сериализовать некоторые графы объектов на диск

С какими трудностями я могу столкнуться, если я внесу изменения в класс, а затем попытаюсь десериализовать старую версию?

Некоторые сериализаторы справляются с этим лучше, чем другие?

Каков стандартный способ обработки такого сценария?

Например, в новой версии кода нужно ли мне сохранять все старые классы, чтобы при десериализации старого файла я мог сделать это для старого класса, а затем перенести данные в новый класс? Изменит ли десериализацию изменение имени класса / пространства имен?

Спасибо за любой совет

Ответы [ 2 ]

3 голосов
/ 04 июня 2010

Ну, насколько я помню, проблемы начинаются после:

  • Добавление нового поля / свойства в класс;
  • Изменение типа существующего поля / свойства.

Вы можете иметь пользовательскую сериализацию для самостоятельного решения проблем управления версиями.

Но я бы рекомендовал использовать DataContractSerializer вместе с Best Practices: управление версиями контракта данных для наиболее распространенных случаев.

1 голос
/ 04 июня 2010

Этот тип зависит от того, в каком формате вам нужны сериализованные данные. Если вы используете двоичную сериализацию .NET 1.0, то вы будете ограничены конкретной версией DLL. Я бы не рекомендовал это.

Лично я бы предложил использовать DataContracts с сериализатором WCF по умолчанию: DataContractSerialiser. Вы можете контролировать то, что происходит, когда вы десериализуете другую версию типа с помощью таких методов, как [OnDeserializing] и IExtensibleDataObject.

Вы также можете иметь DataContractSerializer выходной XML или двоичный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...