【发布时间】:2013-03-15 21:50:47
【问题描述】:
如果我想序列化一个对象,我必须使用[Serializable] 属性,并且所有成员变量都将写入文件。我不知道如何进行版本控制,例如如果我添加一个新成员变量(重命名一个变量或只是删除一个变量)然后我打开(反序列化)文件我如何确定对象/文件版本以便我可以正确设置新成员或进行某种迁移?如何确定变量在加载期间是否已初始化(被反序列化程序忽略)。
我知道有版本容错的方法,我可以用[OptionalField(VersionAdded = 1)] 属性标记变量。如果我打开一个旧文件,框架将忽略这个可选(新变量),它只是零/空。但是我又如何确定变量是由加载初始化还是被忽略。
我可以将类/对象版本号写入流。使用ISerializable 方法并在constructor(SerializationInfo oInfo, StreamingContext context) 方法中读取此版本号。这将准确地告诉我流中的类版本是什么。
但是我希望这种版本控制已经由 C# 中的流框架实现。我尝试从SerializationInfo 获取程序集版本,但它始终设置为当前版本,而不是保存对象时使用的版本。
首选方法是什么?我在网上找到了很多文章,但我找不到解决版本控制的好方法......
任何帮助表示赞赏 谢谢, 深渊
【问题讨论】:
标签: c# .net serialization migration versioning