如何重构在.NET中序列化的类?
我有一个C#类,由序列化到磁盘,如以下示例:如何重构在.NET中序列化的类?,.net,serialization,refactoring,versioning,binaryformatter,.net,Serialization,Refactoring,Versioning,Binaryformatter,我有一个C#类,由序列化到磁盘,如以下示例: // Version 3.0 [Serializable] public class Person { public string FullName; [OptionalField(VersionAdded=2)] public string NickName; [OptionalField(VersionAdded=2)] public DateTime BirthDate; [OptionalF
// Version 3.0
[Serializable]
public class Person
{
public string FullName;
[OptionalField(VersionAdded=2)]
public string NickName;
[OptionalField(VersionAdded=2)]
public DateTime BirthDate;
[OptionalField(VersionAdded=3)]
public int Weight;
}
稍后,我想通过以下一个或多个方法重构这个类-更改其名称
-更改其名称空间
-移动到另一个部件 据我所知,只有当具有完全相同名称、命名空间和程序集名称的类可用时,才能反序列化二进制文件 如何解决这个问题?
是否可以在不中断的情况下将反序列化映射到不同的类名、命名空间和程序集?您可以实现接口并重写以提供自己的反序列化。我没有尝试过,但您应该能够“手动”反序列化旧对象。经过一些研究,我意识到BinaryFormatter确实支持我所寻找的一切 BinaryFormatter可以使用代理来
编辑:另一方面,重构字段(名称或类型)仍然是一个难题,如中所述。我目前正在研究protobuf net,以便在将来更好地解决这个问题。那么您的意思是说Person应该实现ISerializable和GetObjectData()?当反序列化程序具有不同的名称、命名空间和/或程序集时,它如何知道应该使用这个确切的Person类?我能告诉反序列化程序使用哪个类吗?