【问题标题】:How to duplicate fields names with proto3 oneof feature?如何使用 proto3 oneof 功能复制字段名称?
【发布时间】: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;

【问题讨论】:

标签: java protocol-buffers grpc proto3


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 2021-07-05
    • 2020-07-07
    • 2020-07-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多