Ray*_*sen 7 .net protocol-buffers
目前,.NET有两个proto buf库:
http://code.google.com/p/protobuf-csharp-port/以Jon Skeet为所有者 http://code.google.com/p/protobuf-net/与Marc Gravell为所有者
两者有什么区别?两者的编码规格与Google规范相同吗?有什么不同吗?
我问的原因是,目前我们在使用Java的服务和可能的C++库之间进行了原始buf互操作,并希望确保避免任何问题或边缘情况.
Mar*_*ell 11
Jon的版本主要是Java版本的端口,因此具有非常类似的API和设计方法.它也是AFAIK完全契约优先,即来自.proto.
我的版本更多地从.NET的角度出发,查看.NET序列化程序中常见的东西 - 可变对象,现有类型的改进,代码优先(尽管如果你想要它仍然可以从.proto执行代码生成)它甚至可以从使用的属性推断数据XmlSerializer并DataContractSerializer与现有代码并排工作,并且可以插入远程处理(通过ISerializable)和WCF(通过属性或配置).因此它深深植根于.NET生态系统.我还包括继承支持(因为这在其他.NET序列化程序中很常见),但由于它在.proto中没有直接表示,因此映射到其他平台有点繁琐.
二进制数据应该相同; 这在很大程度上取决于格式; p主要是选择哪种API可能更适合您.
为了满足您的需求,在同一系统中与C++和Java代码并行工作,并使用现有的.proto定义,我建议Jon的版本可能是最合适的选择.
但是,如果你正在做的.NET 只,或与互操作是做.NET 外部代码(即你不关心什么语言"另一边"的用途,因为你只需要担心自己的代码),然后IMO protobuf-net可以是一种非常无痛的方式来消费数据; 特别是如果您现在有一个现在想要序列化的系统(或者:更快/更小的序列化).