我正在開發一個使用MonoGame的移動跨平臺遊戲(iOS,Android,WP8)& Xamarin。我有一個名爲PlayerData的類,其中包含高分和其他統計數據。我使用XmlSerializer編寫並讀取它。發佈遊戲後,假設我更改了PlayerData的基類,添加了新的字段,並刪除了一些現有的字段,然後再次將其作爲更新發布。 XmlSerializer是否能夠成功讀取先前版本的保存的XML數據,該數據不會完全映射到更新後的PlayerData類?在哪種情況下會失敗?你有沒有建議爲未來的項目提供更好的選擇?如何容忍XmlSerializer的變化
1
A
回答
0
XmlSerializer
本身對改變的關注很少。如果它無法序列化一個屬性到類中,數據將被忽略。由您決定如何處理從PlayerData
版本1.0到2.0的遷移。
我會建議將版本號與您的PlayerData
類相關聯。現在您可以跟蹤您的應用程序試圖加載哪個版本的PlayerData
。如果它的版本是1.0,而現在你的版本是2.0,那麼你必須編寫邏輯來遷移任何包含你想保留的數據的屬性。你如何做實際的遷移取決於你。
例如,在發佈更新的PlayerData
類之後,實現此遷移的一種簡單方法是創建另一個名爲PlayerDataV1
的類。 PlayerDataV1
可以像PlayerData
一樣設置,或者甚至繼承PlayerData
。現在在配置文件加載期間,您可以將1.0版配置文件反序列化到此類中,然後使用您在PlayerDataV1
中創建的遷移方法將它們遷移到新的類結構中。
相關問題
- 1. 任何容忍NULL值的CONCAT()變體?
- 2. XmlSerializer的序列化類內容
- 3. XmlSerializer混合內容反序列化
- 4. 如何讓XmlSerializer不序列化容器標籤?
- 5. 如何使用XmlSerializer序列化'System.Numerics.Complex'?
- 6. 版本容忍序列化 - 如何查找原始版本的組件名稱
- 7. 使pylint容忍請求
- 8. 使TreeMap Comparator容忍null
- 9. 比較顏色與容忍
- 10. 優化樹中容忍度在某處深處的值
- 11. StringBuilder的容量如何變化?
- 12. cakephp奇怪的可容忍的行爲
- 13. 設置變量在忍者
- 14. 如何在as3中獲得對mouseOver行爲的容忍度?
- 15. 是否有像ASP.NET的Glimpse容忍iframe?
- 16. 容忍最頻繁的子字符串
- 17. Android上的DTN(延遲容忍聯網)
- 18. PHP - 使圖像背景變得透明容忍
- 19. 變化內容
- 20. 如何通過XmlSerializer的
- 21. 如何嘲笑的XmlSerializer
- 22. 使用XmlSerializer序列化ArrayList
- 23. XmlSerializer和xsi:反序列化
- 24. 使用XmlSerializer反序列化
- 25. XmlSerializer不會序列化IEnumerable
- 26. XMLSerializer未序列化DateTime
- 27. XmlSerializer不反序列化DateTime
- 28. 使用XmlSerializer序列化IntPtr
- 29. XMLSerializer不反序列化XML
- 30. XmlSerializer:格式化標記