.NET协议缓冲区库的差异

时间:2011-01-18 11:37:36

标签: .net protocol-buffers

目前,.NET有两个proto buf库:

http://code.google.com/p/protobuf-csharp-port/以Jon Skeet为主人 {3}与Marc Gravell作为所有者

两者有什么区别?两者的编码规格与Google规范相同吗?有什么不同吗?

我问的原因是,目前我们在使用Java和可能的C ++库的服务之间进行了原始buf互操作,并希望确保我们避免任何问题或边缘情况。

1 个答案:

答案 0 :(得分:11)

Jon的版本主要是Java版本的端口,因此具有非常类似的API和设计方法。它也是AFAIK完全契约优先,即来自.proto。

我的版本更多地从.NET的角度来看,看看.NET序列化程序中常见的东西 - 所以可变对象,现有类型的改进,代码优先(尽管它仍然可以如果你愿意,可以使用.proto中的代码生成等等。它甚至可以推断XmlSerializerDataContractSerializer使用的属性中的数据与现有代码并排工作,并且可以插入远程处理(通过ISerializable)和WCF(通过属性或配置)。因此它深深植根于.NET生态系统。我还包括继承支持(因为这在其他.NET序列化程序中很常见),但由于它在.proto中没有直接表示,因此映射到其他平台有点繁琐。

二进制数据应该相同;这在很大程度上取决于格式; p主要是选择哪种API可能更适合您。

根据您的需求,在同一系统中与C ++和Java代码并行工作,并使用现有的.proto定义,我建议Jon的版本可能是最合适的选择。

但是,如果您只使用.NET ,或者正在使用外部代码进行互操作.NET(即您不关心“其他”是什么语言方“使用,因为你只需要担心自己的代码”,然后IMO protobuf-net可以是一种非常无痛的方式来消费数据; 特别是如果您现在有一个现在想要序列化的系统(或者:更快/更小的序列化)。