Protobuf - 带有可选数组的对象

Protobuf - Object with optional arrays

我有一个对象是这样的:

{
  "colorRestrictions": {
    "availableColors":[ ... ], 
    "excludedColors": [ ... ]
  }
}

考虑到 colorRestriction 是一个可以包含任一数组的对象,我该如何将其转换为原型文件?

属性 oneof 不允许在声明中使用 repeated

我想这很常见,但我找不到直接的答案,有什么建议吗? 谢谢

字段在Protobuf 3中都是可选的,所以定义普通字段即可。

message ColorRestriction {
  repeated Color available_colors = 1;
  repeated Color excluded_colors = 2;
}

oneof 用于 mutually-exclusive 字段。它不需要字段存在; a oneof 可以取消设置。

即使在 Protobuf 2 repeated 中也无法将字段标记为必填。 repeated 字段没有正常字段存在,因为“空列表”的编码与“未设置列表”相同。当您需要重复字段中的存在信息时(例如,将其包含在 oneof 中或将“空列表”与“未设置列表”区分开来),您可以将其包装在消息中。

message ColorRestriction {
  ColorList available_colors = 1;
  ColorList excluded_colors = 2;
}

message ColorList {
  repeated Color colors = 1;
}