2014-10-05 46 views
2

我試圖反序列化使用舊版本序列化的文件。.net二進制格式化程序反序列化其定義發生了很大變化的對象

在新版本中,我們做了以下事情

  1. 改變命名空間
  2. 更改類成員訪問級別,從私人到公共
  3. 添加一個新的跨父類。 A類來源於Base。現在,A類源自B,B源自Base。在B中,沒有新成員介紹過。
  4. 基類添加一個新成員。

我知道使用SerializationBinder可以解決問題1.對於新添加的類成員,我標記了[NonSerialized]。但我仍然遇到反序列化錯誤。

任何指針?

回答

1

我討厭這樣說,但我在這裏第一個指針是「不這樣做」 - BinaryFormatter很脆 - 雖然你可以經常鍵盤6小時,讓過去每個會碰你的頭連續的痛點,它真的不值得。有很多原因我總是說「不要使用BinaryFormatter」 - 你可悲的發現其中4個。坦率地說,我的建議是:

  • 放回到原來的班級,並使用它只是作爲一個DTO反序列化老數據
  • 開始移動到您有一個單獨的DTO模型和實體模型的模型 - 並在它們之間映射以便您的序列化完全獨立於您的應用程序邏輯
  • 研究不同的序列化程序;幾乎任何替代串行最好將BinaryFormatter(也許除了NetDataContractSerializer,肚裏並重復所有犯同樣的錯誤; DataContractSerializer是確定十歲上下,雖然)

對不起,是不是更積極的...

+0

在仔細閱讀http://msdn.microsoft.com/en-us/magazine/cc188950.aspx後,我意識到使這種情況發生的努力太多了。我決定再次導入舊的類,並將整個序列化器遷移到另一個,擺脫二進制格式化器。 – ianXian 2014-10-06 17:37:05

相關問題