在.proto文件中使用必需的字节

时间:2014-05-07 14:10:05

标签: c# .net serialization protocol-buffers protobuf-net

通过Google Protocol Buffers序列化/反序列化时,我对required bytes(应该)的工作方式感到头疼。

鉴于这样的原型:

message MyMessage
{
    // 0 or more bytes
    required bytes content = 1;
}

optional bytes字段相比,我预计会有某种不同的行为。我所知道的是,无法区分线上空字节数组和零长度字节数组之间的区别。

作为旁注:我们正在使用Protobuf-Net,有时会为空/空重复字段添加一些额外的糖(如非空List<>)但是对于字节,我们总是在零的情况下为空/ null字节数组,不管required/optional

简而言之,requiredbytes字段有什么影响?如果没有,那么最好总是使用optional bytes吗?

1 个答案:

答案 0 :(得分:0)

我不是特别了解Protobuf-Net,但在大多数Protobuf实现中,每个字段都有一个has访问器,它返回true或false以指示字段是否已明确 集。您可以显式将字节字段设置为空。 required只是确保你不要忘记设置它。

我实际上强烈建议您永远不要使用requiredIt turns out required fields were a huge misfeature.