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;
}
我有一个对象是这样的:
{
"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;
}