8

Protobuf-net 中 AsReference 选项的存在以及 BinaryFormatter 是“图形序列化程序”的词使我假设 BinaryFormatter 不维护引用并且它会复制每个对象。

但我做了一些测试,发现单个 BinaryFormatter Serialize() 或 Deserialize() 调用中的所有引用即使对于递归引用也是如此。

我可以确认 BinaryFormatter 确实维护引用吗?这与 Protobuf-net 有何不同?好像我对“图形序列化”的理解不正确?我还应该注意什么?

提前致谢。

4

1 回答 1

7

tl;博士; 版本 -BinaryFormatter始终保留引用。

作为“图形序列化程序”的事实BinaryFormatter与“它保留引用”是同义词,因为这是准确再现图形所必需的。另一种选择是序列化器(其中大多数是树序列化器;XmlSerializerDataContractSerializer(没有启用特定选项)JavascriptSerializer和没有的 protobuf-netAsReference都是基于树的)。树序列化程序通常不会保留引用(除非它们有一些技巧,即DataContractSerializer如果您启用全图模式会做什么,或者 protobuf-net 会做什么AsReference)。树序列化程序(未启用 voodoo)往往会在递归模型中一团糟,这使得它们很容易被发现。

于 2011-09-20T09:03:11.600 回答