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

听起来您需要实现ISerializationSurrogate和一些SerializationBinder魔术。在旧的MSDN 杂志专栏中对此进行了很好的讨论。

于 2011-05-10T13:44:41.777 回答
0

这是一个有趣的问题;我的直觉是这样做:

我会编写一个升级程序,它具有将其写入新格式的旧类格式,或者您可以理解并转换为新类层次结构的中间格式。

也许通过反序列化旧存档的二进制格式,XML 对其进行序列化,然后可能使用 LinqToXml 在新层次结构中创建对象。

于 2011-05-10T13:12:45.847 回答