小编use*_*502的帖子

C#中的序列化和对象版本控制

如果我想序列化一个对象,我必须使用[Serializable]属性,所有成员变量都将写入该文件.我不知道如何进行版本控制,例如,如果我添加一个新的成员变量(重命名一个变量或只是删除一个变量),然后打开(反序列化)该文件,我如何确定对象/文件版本,这样才能正确设置新成员还是进行某种迁移?如何确定变量是否在加载期间初始化(由反序列化器忽略).

我知道有版本容忍方法,我可以用[OptionalField(VersionAdded = 1)]属性标记变量.如果我打开一个旧文件,框架将忽略这个可选(新变量),它将只是零/ null.但是,我如何确定变量是通过加载初始化还是被忽略.

我可以将类/对象版本号写入流中.使用ISerializable方法并在constructor(SerializationInfo oInfo, StreamingContext context)方法中读取此版本号.这将告诉我流中的类版本是什么.

但是我预计C#中的流式传输框架已经实现了这种版本控制.我试图从中获取程序集版本,SerializationInfo但它始终设置为当前版本而不是保存对象时使用的版本.

什么是首选方法?我在网上发现了很多文章,但我找不到一个很好的解决方案来解决版本问题......

任何帮助表示感谢,谢谢,深渊

.net c# versioning migration serialization

12
推荐指数
1
解决办法
4104
查看次数

标签 统计

.net ×1

c# ×1

migration ×1

serialization ×1

versioning ×1