1

我们正在构建使用 .NET 运行时序列化将对象存储到隔离存储的应用程序。
当我们通过向我们正在序列化的对象的类中添加一些新属性来更新应用程序时,就会出现问题。因此,我们希望对隔离存储中的对象进行某种版本控制,以便在反序列化之前检查它们是否已过时。

任何建议和想法如何以最好的方式做到这一点?

您如何看待实现 IFormatter 接口的自定义格式化程序,它可以帮助而不是对对象进行版本控制吗?

我在 MS 论坛上写了关于这个问题的文章,在这里更详细。

4

4 回答 4

1

您可以在序列化中进行序列化。首先是一个包装类,告诉版本,并保存内部真实类。

不过这个感觉有点臭。。

于 2010-10-20T12:55:36.073 回答
1

这里有几个选项(按任何特定顺序)。

  • 根据版本命名文件
  • 将文件放在基于版本的目录中
  • 创建一个包装对象,其中包含有关每个序列化对象的元数据,例如版本号。
  • 为每个包含持久应用程序版本号的对象添加一个属性
于 2010-10-20T12:58:03.057 回答
1

如果它的二进制序列化,您可以直接读取字节,并从中确定程序集版本。字节数 22 以后包含有关程序集和对象类型的信息,因此您可以编写一些可以读取此内容的内容,然后确定您的对象是否已过时。

于 2010-10-20T17:52:40.693 回答
1

Marc Gravell 在评论中提出了使用版本容错序列化器的好主意。它使我们能够充分控制反序列化,甚至使过时的对象可重用。更多关于msdn

感谢大家的建议。

于 2010-11-08T09:43:12.790 回答