古いバージョンのアプリケーションで「SomeClass」を逆シリアル化しようとしています。私は例外の下でこれを得る逆シリアル化の逆シリアル化
System.Runtime.Serialization.SerializationException:ObjectManagerが無効な数のフィックスアップを見つけました。これは、通常、Formatterの問題を示します。私はバージョン0.9をシリアライズし、バージョン0.8を使用してデシリアライズしようとき
逆シリアル化は、例外がスローされます。私はOptionalField
属性がトリックをするだろうと思ったが、そうしなかった。私は、以前のバージョンは何でも彼らができるデシリアライズすることができるようにFooのオブジェクトに多くの状態を追加する必要がありますどのように、バージョン0.8を変更することができないことを考えると
// Version 0.8
[Serializable()]
class Foo{
Bar b;
}
// Version 0.9
[Serializable()]
class Foo{
Bar b;
[OptionalField]
Zoo z;
}
?
すべてのポインタは本当に感謝されます。
更新1 バーとZooは、シリアライズ可能で、ハッシュテーブルやその他のシリアライズ可能なものを含む他のクラスです。これらのクラスではすべてがシリアライズ可能です。 また、ストラットはありません。
フィールドがオプションかどうかはここでは無関係です。事実、シリアル化はAFAIKのバージョン間では機能しません。それはもちろん、メンバーを追加することはできないと言っているわけではありませんが、例えば、慣習的な型を定義し、既存のものと直列化された項目をデシリアライズすることはできません。 '、と思います。 –
kareph、実際のタイプの「動物園」は何ですか?私はいくつかの型(配列)が正しく動作しなかったことを覚えています。 –
バイナリシリアル化ではなくxmlシリアル化を使用しますか?それはよりバージョンセーフです。 – code4life