二进制格式化程序对象图升级

本文关键字:对象图 程序 格式化 二进制 | 更新日期: 2023-09-27 17:55:42

在我的对象图中,我有类似的东西

[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;
}

但是:当我反序列化旧存档时,我没有狗。 他们根本没有从存档中反序列化。

我想要的是一些关于如何做到这一点的建议。 如果我需要新的类层次结构并手动将对象从旧 Dog 复制到新 TheDog,很好,但如果可能的话,我想避免它。

编辑:一些.NET大师,为什么我没有任何狗?

二进制格式化程序对象图升级

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

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

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

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