3

我正在研究基于对象模型的序列化散列它。

如果我使用 .NET BinaryFormatter 序列化对象图,对于所有涉及的对象都由相同值组成的另一个对象图,序列化表示是否保证字节对字节完全相同?

直觉上,我是这么认为的,但我不确定对象/引用 ID 是否会以某种方式影响实际的序列化表示。

提前致谢。

4

1 回答 1

2

我不知道这是有保证的,并且由于缺乏书面保证,我个人不会依赖它。尤其:

  • 任何实现ISerializable(即自定义序列化)都可以做任何它想做的事情
  • 任何涉及字典之类的东西都可能不可靠 - 仅仅是因为字典中没有定义的顺序,它可能取决于原始空间与重组后的空闲空间等
  • 平台、修订等之间可能存在细微的兼容但不相同的变化

但是,如果您在谈论二进制等价,我推断您正在谈论数据的存储以及BinaryFormatter以后的后续比较。请允许我强调:IMO,BinaryFormatter不适合存储;在共享平台和应用程序版本的正在运行的系统之间传输数据是可以的(ish),但是我看到人们由于版本差异而陷入困境的绝对次数BinaryFormatter是压倒性的。正是由于这些原因,我对 protobuf 产生了兴趣,并编写了我自己的序列化程序,该序列化程序适用于存储和再水合现有对象模型,这些模型在此期间已经“版本化”。

于 2011-04-26T11:33:34.777 回答