Игнорировать устаревшее поле при десериализации
Я весь день искал способ добиться этого без результата...
Я пытаюсь десериализовать объект. Когда я его сериализовал, у меня был bool (скажем, устаревший Bool). В новой версии класса я удалил этот bool, и теперь у меня возникает ошибка при десериализации (поле "obsoleteBool" не найдено).
Очень легко добавить новые поля между старой и новой версией класса. Даже без использования атрибута [OptionalField]... но как я могу управлять удалением поля между старой и новой версией класса?
1 ответ
Решение
Есть 3 возможных решения:
- Самое простое: добавить старое поле в новую версию класса
- Пользовательский код: реализовать пользовательский десериализатор
- Дополнительная работа: Напишите программу преобразования, которая просматривает все сериализованные классы, читает их в старом формате и повторно сериализует их с помощью определения нового класса.
С точки зрения стоимости бизнеса первый вариант, вероятно, предпочтительнее.