我最近开始工作的protobufs,发现以下很难。你能帮帮我吗?
示例代码:
DescriptorProto.Builder builder;
FieldDescriptorProto.Builder fieldBuilder = FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.setNumber(1)
.setDefaultValue("value");
builder.addField(fieldBuilder.build());
现在让该字段的类型为 FieldDescriptorProto.Type.TYPE_MESSAGE 。 我必须将子字段添加到使用 fieldBuilder 构建的字段。
这应该是可能的,因为当我为具有带字段的嵌套消息的根消息的proto文件构建描述符文件时。当我调试我发现的是"带有内部字段的类型消息的字段被添加到根消息",即,对于以下消息,它表示为rootMessage具有字段subMessage(type =消息)有两个子字段B,C。
示例Proto:
message rootMessage{
string A = 1;
message subMessage{
string B = 1;
string C = 2;
}
subMessage sub = 2;
}
通常我需要像
这样的东西FieldDescriptorProto.Builder fieldBuilder = FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.addField(...) // **This Part**
.setNumber(1)
.setDefaultValue("value");
答案 0 :(得分:0)
protobuf使用的想法是向父项添加嵌套消息和字段,并通过在字段中添加 setTypeName 来链接它们,并添加具有字段字段中给出的名称的嵌套消息的typeName 强>
DescriptorProto.Builder builder;
FieldDescriptorProto.Builder fieldBuilder =FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.setTypeName("nestedMessageName")
.setNumber(1)
.setDefaultValue("value");
builder.addField(fieldBuilder.build());
builder.addNestedMessage(messageBuilder.setName("nestedMessageName").build());