有没有办法实现map <string,map <string,=“”list <string =“”>&gt;&gt;在protobuf 3?

时间:2017-08-24 04:15:45

标签: java protocol-buffers avro proto protobuff.net

我试过这个但是有范围问题。

message DataCollectionMessage {

    message subData
    {
        message SubDataList {
            repeated string data = 1;
        }
        map<string, subData> parameters = 1;
    }
    map<string,SubDataList> parameters =1;
}

这里SubDataList和subData有未解析的引用。

1 个答案:

答案 0 :(得分:0)

问题中的protobuf只有一个小问题:最里面的地图使用subData而外部地图使用SubDataList,但它应该反过来:

message DataCollectionMessage {
    message SubData {
        message SubDataList {
            repeated string data = 1;
        }
        map<string, SubDataList> parameters = 1;
    }
    map<string, SubData> parameters = 1;
}

(为了保持一致性,我也将SubData大写。)

生成的Java代码将具有以下类(为清晰起见,剪切和重新排序):

public static final class DataCollectionMessage {

  public Map<String, DataCollectionMessage.SubData> getParametersMap() { ... }

  public static final class SubData {

    public Map<String, DataCollectionMessage.SubData.SubDataList> getParametersMap() { ... }

    public static final class SubDataList {
      public ProtocolStringList getDataList() { ... }
    }
  }
}

请注意,SubDataList的{​​{1}}与ProtocolStringList类似。

如果得到不同的结果,请发布您正在使用的protobuf文件以及生成的Java代码的相关部分。