Насколько толерантен XmlSerializer к изменениям?

1

Я разрабатываю мобильную кросс-платформенную игру (iOS, Android, WP8) с помощью MonoGame & Xamarin. У меня есть класс под названием PlayerData, который содержит данные, такие как высокий балл и другие статистические данные. Я пишу и читаю его с помощью XmlSerializer. После выпуска игры предположим, что я меняю базовый класс PlayerData, добавляю новые поля и удаляю некоторые существующие, а затем снова выпускаю его как обновление. Удастся ли XmlSerializer успешно прочитать сохраненные XML-данные предыдущей версии, которая не соответствует точно обновленному классу PlayerData? при каких условиях он потерпит неудачу? Вы посоветуете лучшую альтернативу будущим проектам?

Теги:
xamarin
monogame
xml-serialization

1 ответ

0
Лучший ответ

Сам XmlSerializer очень мало заботится об изменениях. Если он не может сериализовать свойство в классе, данные игнорируются. Вам решать, как обрабатывать миграции с PlayerData версии 1.0 до 2.0.

Я бы рекомендовал связать номер версии с вашим классом PlayerData. Теперь вы можете отслеживать, какую версию PlayerData пытается загрузить ваше приложение. Если это версия 1.0, а теперь вы в 2.0, вам нужно написать логику для переноса любых свойств, содержащих данные, которые вы хотите сохранить. Как вы делаете фактическую миграцию, зависит от вас.

Например, после выпуска обновленного класса PlayerData простым способом реализации этой миграции является создание другого класса под названием PlayerDataV1. PlayerDataV1 можно настроить так же, как PlayerData, или даже наследовать PlayerData. Теперь во время загрузки профиля вы можете выполнить десериализацию профилей версии 1.0 в этом классе и перенести их в новую структуру классов, используя методы миграции, созданные в PlayerDataV1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню