2011-08-22 50 views
1

我正在使用DataContractSerializer存儲我自己的類的對象以保存用戶設置。 UserSettings類使用不同數據類型的其他對象。我將所有這些類型添加到DataContractSerializer的KnownTypes參數中,這很好。 但我有問題與向前兼容性。如果我使用新的數據類型在UserSerrings類中引入新屬性,它也適用於我的程序的新版本。但是舊版本引發異常,說XML文件不能被反序列化,因爲數據類型不在KnownTypes數組中。 我只是想忽略這些類型,因爲它們在舊版本中並未使用。 我該如何做到這一點,以便舊版本可以讀取和寫入xml文件,忽略那些未知的屬性/類型?DataContractSerializer向前兼容性問題

+0

我不知道一個DCS修復,但我可能有一個解決方案如果你不綁定到XML ... –

+0

我不需要xml。你會建議什麼? – Steve

+0

我維護protobuf-net,一個替代串行器;意想不到的子類型可以默默地被忽略,同時仍然保留你期望的層次結構中的任何值 –

回答

2

這正是IExtensibleDataObject(擴展數據)設計的場景!這個想法是,如果數據合同的v1版本使用擴展數據接口進行修飾,它將自動忽略,存儲和往返未來數據合同修訂版(包括未來未知的類型)中的數據,而沒有任何問題。

我推薦以下資源詳細瞭解此功能,並學習如何實現它爲您的具體情況:

Forward-compatible data contracts

Data contract versioning

IExtensibleDataObject sample

And even more guidance on data contract versioning...

+0

喜歡它。謝謝! –