Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二进制格式化程序中的引用完整性_C#_Reference_Protobuf Net_Binaryformatter - Fatal编程技术网

C# 二进制格式化程序中的引用完整性

C# 二进制格式化程序中的引用完整性,c#,reference,protobuf-net,binaryformatter,C#,Reference,Protobuf Net,Binaryformatter,Protobuf net中存在AsReference选项,并且BinaryFormatter是一个“图形序列化程序”,这让我假设BinaryFormatter不维护引用,它会复制每个对象 但我做了一些测试,发现一个BinaryFormatter Serialize()或Deserialize()调用中的所有引用都是维护的,即使对于递归引用也是如此 我可以确认BinaryFormatter确实维护引用吗?这与Protobuf网络有何不同?似乎我对“图形序列化”的理解不正确?我还应该注意什么 提前感

Protobuf net中存在AsReference选项,并且BinaryFormatter是一个“图形序列化程序”,这让我假设BinaryFormatter不维护引用,它会复制每个对象

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

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


提前感谢。

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

事实上,
BinaryFormatter
是一个“图形序列化程序”,这与“它保留引用”同义,因为这是准确复制图形所必需的。另一种选择是序列化程序(其中大多数;
XmlSerializer
DataContractSerializer
(未启用特定选项),
JavascriptSerializer
和protobuf-net(未使用
AsReference
都是基于树的)。树序列化程序通常不会保留引用(除非它们使用了一些技巧,例如启用完整图形模式时,
DataContractSerializer
所做的,或者protobuf net使用
AsReference
所做的)。树序列化程序(没有启用伏都教)倾向于在递归模型的混乱中爆炸,这使得它们很容易被发现