Лучшие практики для сериализации и десериализации объектов .net в разных версиях. - PullRequest
5 голосов
/ 06 марта 2009

Объекты сериализуются в базу данных с использованием XML-сериализатора .NET. Объект может со временем меняться, и поэтому в базе данных одновременно существует несколько версий.

Любые предложения о лучшем способе создания вашего кода, чтобы вы все еще могли десериализовать этот объект в последнюю версию. (интерфейсы / карты / ручная сериализация и т. д.)

Ответы [ 5 ]

2 голосов
/ 06 марта 2009

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

2 голосов
/ 06 марта 2009

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

1 голос
/ 06 марта 2009

Все зависит от вашего приложения. Это распределенное многофункциональное приложение, в котором старые приложения могут встретить новые объекты данных из центральной базы данных или другого источника? (Как и в старых версиях офисных приложений, необходимо иметь несколько способов работы с новыми форматами документов.)

Если это так, то я бы сказал, настраиваемая сериализация и десериализация с явной нумерацией версий схемы. Я бы поставил явные метаданные на каждый элемент и атрибут, указав, должен ли читатель понимать элемент / атрибут (и значения по умолчанию, если нет). Это, конечно, может занять довольно много места и увеличить сложность кода ...

Но ответ действительно зависит от того, почему вы сериализуетесь в базу данных. Вы не заинтересованы в использовании базы данных для ее реляционных возможностей? В противном случае может быть интересным решение для отображения O / R.

0 голосов
/ 06 марта 2009

Что рассказывает Алекс Рейтборт.

Вы также можете реализовать интерфейс ISerializable для обработки старого значения

0 голосов
/ 06 марта 2009

Не удалять / переименовывать свойства. Только добавь их.

Назначить значения по умолчанию для всех свойств.

Это гарантирует, что сериализатор xml сможет десериализовать старый xml в новый объект, и этот объект будет иметь «нормальные» значения.

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