如何使用 proto3 oneof 功能复制字段名称?
How to duplicate fields names with proto3 oneof feature?
Proto3支持oneof特性,消息中可以有多个字段,同时最多设置一个字段。
由于一次设置一个字段,因此在原型模式中有重复的字段名称是合理的。问题是原型生成器将其视为重新定义。
我想这样做,因为在我的情况下,这使得 json 与 JsonFormat
的序列化变得简单。
例如,我可能喜欢
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;
暂时忽略 JSON;在大多数 languages/frameworks 中,您将通过它们的名称 访问这些属性 ,无论是获取值,还是检查设置的值。如果名称冲突:你不能这样做。
此外:anyof
允许同一类型用于受歧视联合体中的多个成员,在这种情况下,您想要做的事情会变得更加混乱。
最后,回到 JSON:解析器看到 "properties":
- 接下来它期望什么 ? 一旦它解析了值,哪个字段被认为是被区分的联合中的"set"?
所以不,出于很多原因:这是不允许的。
Proto3支持oneof特性,消息中可以有多个字段,同时最多设置一个字段。
由于一次设置一个字段,因此在原型模式中有重复的字段名称是合理的。问题是原型生成器将其视为重新定义。
我想这样做,因为在我的情况下,这使得 json 与 JsonFormat
的序列化变得简单。
例如,我可能喜欢
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;
暂时忽略 JSON;在大多数 languages/frameworks 中,您将通过它们的名称 访问这些属性 ,无论是获取值,还是检查设置的值。如果名称冲突:你不能这样做。
此外:anyof
允许同一类型用于受歧视联合体中的多个成员,在这种情况下,您想要做的事情会变得更加混乱。
最后,回到 JSON:解析器看到 "properties":
- 接下来它期望什么 ? 一旦它解析了值,哪个字段被认为是被区分的联合中的"set"?
所以不,出于很多原因:这是不允许的。