1

Proto3 支持 oneof 功能,您可以在其中拥有包含多个字段的消息,并且最多可以同时设置一个字段。

由于一次将设置一个字段,因此在原型模式中具有重复的字段名称是合理的。问题是 proto 生成器将其视为重新定义。

我想这样做是因为在我的情况下,这使得 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;

4

1 回答 1

1

暂时忽略 JSON;在大多数语言/框架中,您将通过名称访问这些属性,无论是获取值还是检查设置了哪个值。如果名称冲突:你不能这样做。

另外:anyof允许同一类型用于区分联合中的多个成员,在这种情况下,您想要做的事情会变得更加混乱。

最后,回到 JSON:解析器看到了"properties":——接下来会发生什么一旦它解析了这个值,哪个字段被认为是可区分联合中的“设置”?

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

于 2019-11-02T08:53:02.467 回答