Игнорировать устаревшее поле при десериализации

Я весь день искал способ добиться этого без результата...

Я пытаюсь десериализовать объект. Когда я его сериализовал, у меня был bool (скажем, устаревший Bool). В новой версии класса я удалил этот bool, и теперь у меня возникает ошибка при десериализации (поле "obsoleteBool" не найдено).

Очень легко добавить новые поля между старой и новой версией класса. Даже без использования атрибута [OptionalField]... но как я могу управлять удалением поля между старой и новой версией класса?

1 ответ

Решение

Есть 3 возможных решения:

  • Самое простое: добавить старое поле в новую версию класса
  • Пользовательский код: реализовать пользовательский десериализатор
  • Дополнительная работа: Напишите программу преобразования, которая просматривает все сериализованные классы, читает их в старом формате и повторно сериализует их с помощью определения нового класса.

С точки зрения стоимости бизнеса первый вариант, вероятно, предпочтительнее.

Другие вопросы по тегам