c# - 如何比较两个 .NET 对象图的差异?

标签 c# .net serialization protobuf-net

在我们的客户端/服务器应用程序中,我们一直在使用 BinaryFormatter 进行序列化过程。 出于性能原因,我们正在尝试迁移到 protobuf-net ( http://code.google.com/p/protobuf-net/ )。

我们的软件在客户端和服务器之间传输带有循环的巨大图表。

现在我正在寻找一种方法来确保使用 protobuf 序列化和反序列化的数据与通常由 BinaryFormatter 处理的数据完全相同。

逐位比较很简单: 我使用 BinaryFormatter 序列化到一个文件。 使用 BinaryFormatter 再次反序列化此文件。 然后我使用 ProtoBuf 序列化到一个文件中。 使用该文件中的 ProtoBuf 反序列化。 使用 BinaryFormatter 再次序列化到文件中。

然后我可以简单地将该文件与原始文件进行比较。

但是,这两个文件并非 100% 相等。所以现在我需要找到一种方法来追踪差异。

是否有一些工具可以可视化由 BinaryFormatter 序列化的数据?或者您认识其他 helper ,他们会进行深入比较并告诉我差异在哪里?

使用 XMLSerializer 并比较两个 XML 文件是不可能的,因为 BinaryFormatter 能够序列化比 XMLSerializer 更多的数据 - 即使没有显式标记字段也是如此。

谢谢, TH

最佳答案

如何在启用对象跟踪的情况下使用DataContractSerializer(构造函数中的preserveObjectReferences)。 应该允许您将它们序列化为 xml(至少在某种程度上),您可以在其中比较差异。

关于c# - 如何比较两个 .NET 对象图的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661259/

相关文章:

c# - C# 中的间隔容器

c# - 我可以将单个对象序列化为嵌套的 XML 吗?

c# - C# 中的 MongoDb 投影

c# - Int vs Double 和除以零异常

c# - 覆盖 Dictionary.Add

c# - 反射排除基类的所有属性和所有其他派生类的特定属性

Java客户端-服务器无法让服务器继续发送正确的信息

C# XML 反序列化,其中根节点有时具有 namespace 属性

C# Entity Framework 4.1 Lambda Include - 仅选择特定的包含值

c# - 需要一种在 C# 中反序列化 100 万个字符串和 GUI 的快速方法