摘要:.NET 2.0 版本相容序列化機制
在你的應用程式中,那些標示為可序列化(Serializable)的類別可能會因為程式改版而增加新的序列化欄位,或者將原本需要序列化的欄 位移除。在 .NET 1.x 時代,這些伴隨應用程式版本演進所產生的欄位變動,很容易就導致新版的應用程式無法讀取舊版應用程式所儲存的檔案,或者舊版應用程式無法讀取新版應用程式 儲存的檔案。.NET 2.0 的版本相容序列化(Version Tolerance Serialization)機制的主要目的就是在解決這類問題。
Juval Lowy 在 2004 年 10 月份的 MSDN 雜誌上發表了一篇介紹 .NET 序列化的進階技術文章:
裡面詳細說明了 .NET 2.0 序列化機制在版本相容(version tolerance)方面的改進,以及程式設計師可使用哪些方法來解決版本演進所造成的序列化相容問題。
我自己的使用經驗,.NET 2.0 本身的序列化相容機制已經處理掉大部分的問題,雖然 Lowy 的文章裡面說,「預設情況下,binary formatter 在碰到新增加的序列化欄位時會丟出 exception。」但我用自己的應用程式實驗的結果,類別新增欄位之後,在反序列化(讀取)舊版檔案時還是成功,並沒有出現 exception 的情形。或許我實驗的情況太過單純也不一定,又或許 NET Framework 2.0 的 service pack 有再改良過,這部份就沒有再細究了。不過,即使增加欄位會造成問題,用 OptionalFieldAttribute 就能輕易解決,這些解決方法在 Lowy 的文章中已經說得挺詳細,這邊就不重覆了。
其他相關資料:
- 版本相容序列化 on MSDN
- 混淆器與序列化 on my blog
- .NET 筆記:序列化 on my blog