我正在使用MonoGame& amp ;;开发移动跨平台游戏(iOS,Android,WP8)。 Xamarin。我有一个名为PlayerData的类,它包含高分和其他统计数据。我使用XmlSerializer编写并读取它。在发布游戏之后,假设我更改了PlayerData的基类,添加了新字段,并删除了一些现有的字段,然后我再次将其作为更新发布。 XmlSerializer是否能够成功读取先前版本的已保存XML数据,该数据并未完全映射到更新的PlayerData类?它会在哪些条件下失败?您是否为未来的项目提出了更好的选择?
答案 0 :(得分:0)
XmlSerializer
本身对变化的关注很少。如果它不能将属性序列化到类中,则忽略数据。您可以自行决定如何处理从PlayerData
1.0版到2.0版的迁移。
我建议您将版本号与PlayerData
课程相关联。现在,您可以跟踪应用程序尝试加载的PlayerData
版本。如果它是版本1.0,并且您现在使用的是2.0,那么您必须编写逻辑来迁移包含您希望保留的数据的任何属性。您如何进行实际迁移取决于您。
例如,在发布更新的PlayerData
类之后,实现此迁移的一种简单方法是创建另一个名为PlayerDataV1
的类。 PlayerDataV1
的设置方式与PlayerData
相同,甚至可以继承PlayerData
。现在,在配置文件加载期间,您可以将1.0版配置文件反序列化到此类中,并使用您在PlayerDataV1
中创建的迁移方法将它们迁移到新的类结构中。