Protobuf 版本兼容性



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

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

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

proto2 和 proto3 之间最大的功能区别是默认/可选值的处理。Proto3 没有"默认值为 4"的概念(默认值始终为零/零(,也没有显式指定恰好也是默认值的值的概念(始终发送非零值,从不发送零(。因此,如果您的 proto2 架构使用非零默认值,则转换可能会很尴尬。

正如我测试的那样,.netcore仅适用于protobuf3.0语法。

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

最新更新