我有数据存储在一个类的实例已被序列化.net BinaryFormatter。我现在想要重命名类中的某个字段,但仍然能够反序列化旧数据。重命名字段,然后反序列化在C#中
一个选项是手动实现ISerializable并反序列化类的所有字段。但是,这看起来像很多工作,特别是如果我的课有很多领域,我只重新命名了一个领域。
有没有更好的方法?
Craig建议保留旧类的反序列化副本,并将值复制到新类中。我在其他地方也看到了这一点 - 这对于实现ISerializable有什么优势?据我所见,复制这个类给我留下了两个几乎完全相同的类的副本,并且我仍然必须将所有旧类的值复制到新类中 - 这看起来与实现ISerializable具有相同的工作量几乎重复类混入。
两个答案都提到了Binders。我已经成功地使用SerializationBinder来反序列化一个被序列化为类Foo的类Bar,但那是因为类的名称改变了。当你重命名一个字段时,SerializationBinder是否也有帮助 - 例如,当int m_Left被重命名为int m_Right时?
在Binder的BindToType方法中,当您获得带有目标类型(类)的typeName字符串时,只需返回更改属性的新类型即可。类已经改变了属性,但现在是不同的类型。没有办法只适用于一个物业。 – 2009-06-02 23:23:14