我試圖用舊版本的應用程序反序列化「SomeClass」。我得到以下異常反序列化向後兼容性
System.Runtime.Serialization.SerializationException:ObjectManager發現無效數量的修正。這通常表示Formatter中存在問題。
反序列化拋出異常的時候我序列化版本0.9,並使用0.8版本嘗試反序列化。我認爲OptionalField
屬性可以做到這一點,但事實並非如此。
// Version 0.8
[Serializable()]
class Foo{
Bar b;
}
// Version 0.9
[Serializable()]
class Foo{
Bar b;
[OptionalField]
Zoo z;
}
既然我不能改變版本0.8,我應該怎麼添加更多的狀態Foo對象,使得以前的版本可以反序列化一切可能?
任何指針將非常感激。
更新1 酒吧和動物園的其他類,其是可序列化,幷包含哈希表和其他序列化的東西。一切都可以在這些類中進行序列化。 另外,我沒有任何支柱。
字段是否可選與此無關 - 事實是序列化不能跨越各個版本AFAIK;這並不是說你不能添加成員,當然你可以,但是,例如,我不能僅僅定義一個逐字類型,並且反序列化與現有序列化的項目 - 與程序集或類型的令牌',我想。 – 2011-03-21 18:34:48
kareph,「動物園」的真實類型是什麼?我記得有些類型(數組)沒有正確工作。 – 2011-03-21 18:57:34
你願意使用xml序列化而不是二進制序列化嗎?這會更安全。 – code4life 2011-03-21 19:09:13