Protocol buffers 在proto中,如何将地图定义为自定义选项

Protocol buffers 在proto中,如何将地图定义为自定义选项,protocol-buffers,protobuf-net,proto,protobuf-java,protobuf.js,Protocol Buffers,Protobuf Net,Proto,Protobuf Java,Protobuf.js,在我的proto文件中,我想将一个映射定义为一个自定义选项,尝试了一些方法,但没有一个有效 我的元数据原型文件: syntax = "proto2"; import "google/protobuf/descriptor.proto"; package com.util; option java_package = "com.util"; message MyMeta { optional bool needValidation = 1; map<string, string&

在我的proto文件中,我想将一个映射定义为一个自定义选项,尝试了一些方法,但没有一个有效

我的元数据原型文件:

syntax = "proto2";
import "google/protobuf/descriptor.proto";

package com.util;
option java_package = "com.util";

message MyMeta {
  optional bool needValidation = 1;
  map<string, string> fileMap = 2;
}

extend google.protobuf.FieldOptions {
  optional MyMeta meta = 80412; 
}


这可能吗?

似乎不可能。为了实现我的逻辑,我创建了一个类似“StoreOrders:raw\u orders\u test,OrderItems:raw\u order\u items\u test”的字符串


message MyMeta {
  int32 id = 1 [(com.util.meta).needValidation = false, (com.meta).tableOptions = "TableA:valueA,TableB:valueB;
}

并在我的jav代码中,拆分字符串以创建一个哈希映射。

这样做:

消息MyMeta{
int32 id=1[
(com.util.meta)={
需要验证:错误,
文件映射:[
{
键:“t”,
价值:“原始订单”
}
];
}];
}
protobuf
map
是映射条目消息的
重复
字段的语法糖,其中包含
字段

在您的情况下,您的元消息

消息MyMeta{
可选bool-needValidation=1;
map fileMap=2;
}
相当于

消息MyMeta{
可选bool-needValidation=1;
消息文件映射项{
字符串键=1;
字符串值=2;
}
重复FileMapEntry fileMap=2;
}
当然,如果有一种更明显的方法来指定选项中的映射值,那就更好了


message MyMeta {
  int32 id = 1 [(com.util.meta).needValidation = false, (com.meta).tableOptions = "TableA:valueA,TableB:valueB;
}