C# 二进制格式化程序中的引用完整性
Protobuf net中存在AsReference选项,并且BinaryFormatter是一个“图形序列化程序”,这让我假设BinaryFormatter不维护引用,它会复制每个对象 但我做了一些测试,发现一个BinaryFormatter Serialize()或Deserialize()调用中的所有引用都是维护的,即使对于递归引用也是如此 我可以确认BinaryFormatter确实维护引用吗?这与Protobuf网络有何不同?似乎我对“图形序列化”的理解不正确?我还应该注意什么C# 二进制格式化程序中的引用完整性,c#,reference,protobuf-net,binaryformatter,C#,Reference,Protobuf Net,Binaryformatter,Protobuf net中存在AsReference选项,并且BinaryFormatter是一个“图形序列化程序”,这让我假设BinaryFormatter不维护引用,它会复制每个对象 但我做了一些测试,发现一个BinaryFormatter Serialize()或Deserialize()调用中的所有引用都是维护的,即使对于递归引用也是如此 我可以确认BinaryFormatter确实维护引用吗?这与Protobuf网络有何不同?似乎我对“图形序列化”的理解不正确?我还应该注意什么 提前感
提前感谢。tl;博士版本-
BinaryFormatter
始终保留引用
事实上,BinaryFormatter
是一个“图形序列化程序”,这与“它保留引用”同义,因为这是准确复制图形所必需的。另一种选择是树序列化程序(其中大多数;XmlSerializer
,DataContractSerializer
(未启用特定选项),JavascriptSerializer
和protobuf-net(未使用AsReference
都是基于树的)。树序列化程序通常不会保留引用(除非它们使用了一些技巧,例如启用完整图形模式时,DataContractSerializer
所做的,或者protobuf net使用AsReference
所做的)。树序列化程序(没有启用伏都教)倾向于在递归模型的混乱中爆炸,这使得它们很容易被发现