2014-11-03 31 views
1

我正在開發一個使用MonoGame的移動跨平臺遊戲(iOS,Android,WP8)& Xamarin。我有一個名爲PlayerData的類,其中包含高分和其他統計數據。我使用XmlSerializer編寫並讀取它。發佈遊戲後,假設我更改了PlayerData的基類,添加了新的字段,並刪除了一些現有的字段,然後再次將其作爲更新發布。 XmlSerializer是否能夠成功讀取先前版本的保存的XML數據,該數據不會完全映射到更新後的PlayerData類?在哪種情況下會失敗?你有沒有建議爲未來的項目提供更好的選擇?如何容忍XmlSerializer的變化

回答

0

XmlSerializer本身對改變的關注很少。如果它無法序列化一個屬性到類中,數據將被忽略。由您決定如何處理從PlayerData版本1.0到2.0的遷移。

我會建議將版本號與您的PlayerData類相關聯。現在您可以跟蹤您的應用程序試圖加載哪個版本的PlayerData。如果它的版本是1.0,而現在你的版本是2.0,那麼你必須編寫邏輯來遷移任何包含你想保留的數據的屬性。你如何做實際的遷移取決於你。

例如,在發佈更新的PlayerData類之後,實現此遷移的一種簡單方法是創建另一個名爲PlayerDataV1的類。 PlayerDataV1可以像PlayerData一樣設置,或者甚至繼承PlayerData。現在在配置文件加載期間,您可以將1.0版配置文件反序列化到此類中,然後使用您在PlayerDataV1中創建的遷移方法將它們遷移到新的類結構中。