2014-08-27 76 views
1

我使用BinaryFormatter序列化一个类。当我在文本编辑器中打开创建的文件时,我可以看到,在开始时,有些属性(如名称空间,版本,cultureInfo,...)被写入其中。如何在再次反序列化此文件时读取此版本字符串? 提前谢谢!反序列化二进制对象时获取版本

回答

1

你应该看看这个文章在MSDN:

的BinaryFormatter的有两个属性:BinderSurrogateSelector

通过这些,您可以干涉序列化/反序列化过程并访问这些信息。有关它的更多信息可以在上面的文章中找到。

+0

完美,与Binder和BindToType函数我能够找出作为参数提交的前缀字符串。在那里我可以解析出版本。感谢您的帮助! – Holger2012 2014-08-27 11:58:25

2

您可能应该像读普通文件一样读取该部分(读取和检查字节)。

但是,为什么你会对这部分感兴趣?如果你是这样,最好是以正常的方式添加你自己的版本属性作为其他待被序列化的数据,并以正常的方式(像所有其他数据一样通过反序列化)检索它。

备注到您的评论:

  • 如果这是第一次,你可以写一个“更新”,其内容为旧文件,并用新的(所以更改枚举值),把它转换。对于新的序列化对象,添加一个版本(总是,并为您发布的每个版本进行更新)。这种情况下,你可以随时改变。通过创建这样的更新功能,您始终可以将旧版本的数据更改为新版本。在这种情况下(因为你没有版本),你可以认为它是旧版本。
+0

我做了一件非常愚蠢的事情:在序列化类中有一个枚举。我改变了中间添加一些条目的枚举。现在,当我加载一个旧文件时,旧的枚举int值与当前的值不兼容。读出版本后,我希望能够使用“旧”枚举或“新”枚举来依赖版本。但是,也许你有更好的主意? – Holger2012 2014-08-27 09:57:18

+0

我将编辑这个答案。 – 2014-08-27 10:01:46

+0

好的,但是如何检测它是旧的还是新的文件? – Holger2012 2014-08-27 10:55:25

相关问题