Protobuf -具有可选数组的对象



我有一个像这样的对象:

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

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

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

我想这是很常见的,但我找不到一个直接的答案,有什么建议吗?由于

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

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

oneof表示互斥字段。它不需要字段存在;aoneof可以取消设置。

即使在Protobuf 2repeated字段也不能按要求标记。repeated字段没有正常字段存在,因为"空列表"编码与"未设置列表"相同。当您需要在重复字段中出现状态信息时(例如,将其包含在oneof中或区分"空列表");从"unset list"中,你可以把它包装在一个消息中。

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

最新更新