在我的对象图中,我有类似这样的东西
[Serializable]
public class Dog
{
string _name;
}我有各种各样的狗的列表和狗的参考资料。
因为在软件创建之初,狗只是一种动物,所以我不需要任何基类。现在,这种需求已经出现,现在我想要
[Serializable]
public class Dog : Animal
{
public void Bark() { }
}
[Serializable]
public class Cat : Animal
{
public void DoTheCatStuff() { }
}
[Serializable]
public class Animal
{
string _name;
}但是:当我反序列化旧的归档文件时,我没有任何狗。它们根本没有从归档文件中反序列化。
我想要的是一些如何做到这一点的建议。如果我需要新的类层次结构,并手动将对象从旧的Dog复制到新的TheDog中,这很好,但如果可能的话,我希望避免这种情况。
编辑:一些.NET专家,为什么我没有狗?
发布于 2011-05-10 21:44:42
听起来您需要一个ISerializationSurrogate实现和一些SerializationBinder魔术。在旧的MSDN Magazine column中有关于这一点的非常好的讨论。
发布于 2011-05-10 21:12:46
这是一个有趣的问题;我的直觉是这样做的:
我会写一个升级程序,它具有旧的类格式,将其写出为新的格式,或者是一个中间格式,然后您可以理解并转换为新的类层次结构。
也许通过反序列化旧存档的二进制格式,XML序列化它,然后可能使用LinqToXml在新的层次结构中创建对象。
https://stackoverflow.com/questions/5950481
复制相似问题