【发布时间】:2019-11-02 02:36:54
【问题描述】:
Proto3 支持 oneof 功能,您可以在其中拥有包含多个字段的消息,并且最多可以同时设置一个字段。
由于一次将设置一个字段,因此在原型模式中具有重复的字段名称是合理的。问题是 proto 生成器将此视为重新定义。
我想这样做是因为在我的情况下,这使得JsonFormat 的 json 序列化变得简单。
例如,我可能想拥有
message MyResponse {
int32 a = 1;
string b = 2;
oneof Properties {
PropertiesType1 properties = 3;
PropertiesType2 properties = 4;
PropertiesType3 properties = 5;
PropertiesType4 properties = 6;
}
}
有没有办法解决这个问题,还是必须努力重新定义原型?例如,可能的解决方法是使用map<string, Properties> properties = 9;
【问题讨论】:
-
你找到解决这个问题的方法了吗?
-
你需要的是“sum type/discriminated union/tagged union”,不幸的是protobuf不支持。见rainway.com/blog/2021/05/26/schema-language-unions
标签: java protocol-buffers grpc proto3