【问题标题】:Reference integrity in BinaryFormatterBinaryFormatter 中的引用完整性
【发布时间】:2011-09-20 01:27:05
【问题描述】:
Protobuf-net 中 AsReference 选项的存在以及 BinaryFormatter 是“图形序列化器”这个词让我假设 BinaryFormatter 不维护引用并且它会复制每个对象。
但我做了一些测试,发现单个 BinaryFormatter Serialize() 或 Deserialize() 调用中的所有引用都保持不变,即使是递归引用。
我可以确认 BinaryFormatter 确实维护引用吗?这与 Protobuf-net 有何不同?好像我对“图形序列化”的理解不正确?我还应该注意什么?
提前致谢。
【问题讨论】:
标签:
c#
reference
protobuf-net
binaryformatter
【解决方案1】:
tl;博士;版本 - BinaryFormatter 始终保留引用。
BinaryFormatter 是“图形序列化程序”这一事实与“它保留引用”是同义词,因为这是需要准确再现图形。另一种选择是 tree 序列化程序(大多数;XmlSerializer、DataContractSerializer(未启用特定选项)、@ 987654325@ 和没有AsReference 的 protobuf-net 都是基于树的)。树序列化程序不通常会保留引用(除非它们有一些技巧,即如果您启用全图模式,DataContractSerializer 会做什么,或者 protobuf-net 对AsReference 会做什么)。树序列化器(未启用 voodoo)往往会在递归模型的混乱中爆炸,这使得它们很容易被发现。