2009-04-10 75 views
2

我有一個在.NET 1.1中開發的繼承代碼庫。當我將它遷移到2.0時,我重命名了一個程序集。現在,我發現有必要讀取包含由舊程序集和.NET 1.1序列化的對象的舊文件。 某些字段已成功反序列化,但大多數都被忽略。如果我能FormatterAssemblyStyle.Full,我得到一個錯誤,如:類「MyNamespace.T_VERSION如何反序列化有些不兼容的BinaryFormatter數據?

會員「T_VERSION+s_sys_ver」是不存在的序列化流中,並沒有打上System.Runtime.Serialization.OptionalFieldAttribute。

對二進制文件的檢查顯示T_VERSION+s_sys_ve r存在於某種形式,並且字段類型未更改。

是否有任何方法反序列化舊格式文件手動反向工程舊格式和編寫我自己的手動反序列化程序?

回答

5

檢查SerializationBinder

在序列化,格式化器 發送創建 正確的類型和版本的對象的一個​​實例需要 的信息。這個 信息一般包括 全名類型和程序集名稱 的對象。程序集名稱包括 程序集的名稱,版本和強名稱 (請參見強名稱程序集)散列號 。默認情況下, 反序列化使用此信息 創建一個相同對象的實例(除受 安全策略限制的任何 程序集加載外)。一些用戶需要 控制要加載哪個類,或者 ,因爲該類已在 程序集之間移動,或者在服務器 和客戶端上需要該類的其他版本 。

相關問題