3

私のオブジェクトグラフには、次のようなものがあります

[Serializable]
public class Dog 
{
     string _name;
}

そして私は犬のあらゆる種類のリストと犬への言及を持っています。

ソフトウェア作成当初はDogは動物に過ぎなかったので、基本クラスは必要ありませんでした。今、その必要性が浮かび上がってきました。

[Serializable]
public class Dog : Animal
{
    public void Bark() { }
}

[Serializable]
public class Cat : Animal
{
    public void DoTheCatStuff() { }
}

[Serializable]
public class Animal 
{
     string _name;
}

しかし、私がOLDアーカイブを逆シリアル化するとき、私は犬を飼っていません。それらはアーカイブからまったく逆シリアル化されませんでした。

私が欲しいのはそれを行う方法についてのアドバイスです。新しいクラス階層が必要で、オブジェクトを古いDogから新しいTheDogに手動でコピーする場合は問題ありませんが、可能であればそれを避けたいと思います。

編集:いくつかの.NETの達人、なぜ私は犬を飼っていないのですか?

4

2 に答える 2

1

ISerializationSurrogateSerializationBinderマジックの実装が必要なようです。これについては、 MSDNMagazineの古いコラムで非常によく説明されています。

于 2011-05-10T13:44:41.777 に答える
0

これは興味深いものです。私の本能はこれを行うことです:

新しい形式に書き出す古いクラス形式、または理解して新しいクラス階層に変換できる中間形式を持つアップグレードプログラムを作成します。

おそらく、古いアーカイブのバイナリ形式を逆シリアル化することによって、XMLでシリアル化し、LinqToXmlを使用して新しい階層にオブジェクトを作成します。

于 2011-05-10T13:12:45.847 に答える