Сериализация и управление версиями объектов в C #

Если я хочу сериализовать объект, я должен использовать[Serializable] атрибут и все переменные-члены будут записаны в файл. Что я не знаю, как сделать управление версиями, например. если я добавляю новую переменную-член (переименовываю переменную или просто удаляю переменную), а затем открываю (десериализирую) файл, как я могу определить версию объекта / файла, чтобы я мог правильно установить новый член или выполнить какую-то миграцию? Как я могу определить, что переменная была инициализирована во время загрузки или нет (игнорируется десериализатором).

Я знаю, что есть подходы, допускающие версию, и я могу пометить переменные[OptionalField(VersionAdded = 1)] приписывать. Если я открою старый файл, фреймворк проигнорирует этот необязательный параметр (новая переменная), и он будет равен нулю / нулю. Но опять же, как я могу определить, была ли переменная инициализирована загрузкой или она была проигнорирована.

Я могу записать номер версии класса / объекта в поток. ИспользоватьISerializable подход и вconstructor(SerializationInfo oInfo, StreamingContext context) Метод читать этот номер версии. Это точно скажет мне, какая версия класса в потоке.

Однако я ожидал, что такой вид управления версиями уже реализован потоковой инфраструктурой в C #. Я пытался получить версию сборки изSerializationInfo но она всегда установлена на текущую версию, а не на версию, которая использовалась при сохранении объекта.

Какой предпочтительный подход? Я нашел много статей в сети, но я не мог найти хорошее решение для этого, которое касается управления версиями ...

Любая помощь приветствуется Спасибо, Бездна

Ответы на вопрос(1)

Ваш ответ на вопрос