ang*_*sen 7 .net versioning refactoring serialization binaryformatter
我有一个由BinaryFormatter序列化到磁盘的C#类,例如:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
稍后,我想通过以下一个或多个来重构此类
- 更改其名称
- 更改其命名空间
- 移动到另一个程序集
据我所知,只有具有完全相同名称,命名空间和程序集名称的类可用时,才能对二进制文件进行反序列化.
我该如何解决这个问题?
是否可以将反序列化映射到不同的类名,命名空间和程序集,而不会破坏版本容错序列化?
经过一些研究,我意识到BinaryFormatter确实支持我想要的一切.
一个BinaryFormatter的可以使用替代品来
- 提供序列化最初未设计为序列化的类型的功能.
- 提供将一种类型的版本映射到另一种类型的另一种版本的方法.
也可以使用SerializationBinder将反序列化从类型A映射到类型B(不同的类名,命名空间和/或程序集名称).
据我所知,这使得有可能重构序列化的类,并在进行单独版本控制不支持的重大更改时保持向后兼容性.
参考:http://www.diranieh.com/NETSerialization/BinarySerialization.htm
编辑:在旁注中,重构字段(名称或类型)仍然很痛苦,如重命名字段中所讨论的,然后在C#中反序列化.我目前正在研究protobuf-net以便将来更好地解决这个问题.
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |