proto2无法读取proto3消息

时间:2019-09-13 13:35:17

标签: c# protocol-buffers protobuf-net proto3

我们已决定升级到proto3,但仍然必须能够与运行proto2的设备通信一段时间。

现在,我们遇到了一些消息问题,由于required关键字,它们无法在proto2一侧反序列化。

这是我们对(proto2)有疑问的一条消息。

message time_value
{
    required uint32 hour         = 1;
    required uint32 minutes      = 2;    
    required uint32 microseconds = 3;
}

如果我们尝试将此消息发送给proto2客户端,并且设置了以下值,例如小时= 1,分钟= 2,微秒= 0,则客户端无法反序列化此消息。设置微秒= 1,则proto2客户端在读取消息时没有问题。

这可以归结为以下生成的C#代码

public void WriteTo(pb::CodedOutputStream output) {
...
      if (Microseconds != 0) {
        output.WriteRawTag(48);
        output.WriteUInt32(1);
      }
...
}

因此,如果字段具有与数据类型的默认值相同的值,则似乎生成的proto3代码不会发送任何字段。当然,这确实会使proto2感到不安,并且也不想对消息进行反序列化,因为该字段被标记为required,但未收到任何值。

是否可以强制协议生成始终发送所有字段的代码(即使已设置默认值)还是可以通过其他方式解决?

谢谢

0 个答案:

没有答案