protobuf版本兼容性

时间:2018-06-01 06:06:56

标签: protocol-buffers protobuf-net

我正在使用基于protobuf2.0构建的云服务。此云服务无法更改。 现在我们有客户端连接到这个基于.netcore 2.0的云服务。 在我测试时,.netcore仅适用于protobuf3.0语法。

3.0语法与2.0略有不同。如果我在C#.netcore 2.0中使用protobuf3.0部署客户端,它是否可以使用基于2.0 protobuf构建的服务?

1 个答案:

答案 0 :(得分:1)

此时实际的二进制序列化格式根本没有改变,因此没有基本的阻止程序。

proto2和proto3之间最大的特征差异是默认/可选值的处理。 Proto3没有“默认值为4”的概念(默认值始终为零/零),并且没有明确指定恰好也是默认值的值的概念(始终发送非零值,零永远不会发送)。因此,如果您的proto2架构使用非零默认值,则转换可能很不方便。

  

在测试时,.netcore仅适用于protobuf3.0语法。

这句话让我觉得你没有使用protobuf-net(标签),实际上是使用谷歌的C#实现 - Jon的原始端口只是proto2,迁移到Google代码库的版本只是proto3。然而,protobuf-net(一个单独的实现)没有这样的限制,并且在包括.NET Core在内的所有平台上都支持proto2和proto3。但它确实有不同的API。 Protobuf-net可以在nuget上找到,其中.proto处理工具可用here(如果您想与Google版本进行比较,它还可以访问所有“protoc”输出。)