如何使用 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"?

所以不,出于很多原因:这是不允许的。