Как распознать версии объектов, помещенных в изолированное хранилище, используя сериализацию .NET? - PullRequest
1 голос
/ 20 октября 2010

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

Какие-нибудь советы и идеи, как это сделать наилучшим образом?

Что вы думаете о пользовательском форматере, реализующем интерфейс IFormatter, и может ли он помочь вместо проверки объектов?

Я написал об этой проблеме на форуме MS более подробно здесь .

Ответы [ 4 ]

1 голос
/ 08 ноября 2010

Марк Грэвелл предложил в комментарии отличную идею использовать версионный сериализатор.Это позволяет нам достаточно контролировать десериализацию даже для того, чтобы устаревшие объекты можно было повторно использовать.Подробнее о msdn

Спасибо всем за предложения.

1 голос
/ 20 октября 2010

Вот несколько вариантов (в любом конкретном порядке).

  • Назовите файл на основе версии
  • Поместите файл в каталог на основе версии
  • Создайте объект-оболочку, который содержит метаданные о каждом сериализованном объекте, например номер версии.
  • Добавьте свойство к каждому объекту, которое содержит номер версии постоянного приложения
1 голос
/ 20 октября 2010

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

1 голос
/ 20 октября 2010

Вы МОЖЕТЕ иметь сериализацию в сериализации.Во-первых, класс-обертка, сообщающий версию и содержащий внутренний истинный класс.

Это, однако, кажется немного вонючим ..

...