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