2010-08-16 68 views
0

我試圖重新組織我的應用程序的命名空間層次結構,因此我使用System.Runtime.Serialization.SerializationBinder子類嘗試處理重命名。 (我的大部分改名類的正確序列化爲他們的新的命名空間沒有問題。)重構後對舊版(二進制)文件進行反序列化

我的問題是,我的序列化類一個(實現INotifyPropertyChanged)未能標記PropertyChanged事件作爲[field:NonSerialized](糟糕) ,所以傳統文件將持續引用該類的傳統Type(通過序列化委託)。

我在重命名的類上實現了ISerializable,試圖避免反序列化PropertyChanged事件,但這似乎沒有奏效 - 嘗試實例化舊的(重命名的)類仍然發生。如何強制BinaryFormatter避免嘗試反序列化代表?

+0

如果我反序列化一箇中間文件,其中PropertyChanged被標記爲NonSerialized,該文件反序列化沒有問題。 – TreDubZedd 2010-08-16 22:36:36

回答

1

該解決方案似乎是在包含對Type的引用的類上實現ISerializable,並手動管理哪些字段被序列化以及如何。這要求重構類在中間構建的原始名稱空間中留下一個類存根,其中我們將舊文件轉換爲新的(重構)格式。向後兼容性無法恢復,但我們能夠挽救有問題的文件。

0

爲什麼代表可以聲明爲「外部類」是有原因的。

+0

這不是很有幫助。我知道PropertyChanged事件應該被標記爲[NonSerialized]。事實並非如此。我現在問,如果有什麼我可以做的,以避免打破與設計不佳的序列化文件的向後兼容性。 – TreDubZedd 2010-08-20 20:57:32

相關問題