我想了解protobuf-net的Dictionary / KeyValuePair支持。我们希望使用底层二进制流和java生成的proto文件,但生成的.proto文件包含的内容类似于一个名为Pair_String_Int32的自定义类型。
有人可以对此有所了解吗?
我有一个像这样映射的类:
[DataContract]
public class ForwardCurve
{
[DataMember(Order=1, IsRequired = true)]
public string Commodity { get; set; }
[DataMember(Order = 2, IsRequired = false)]
public IDictionary<string, int> DictValue { get; set; }
[DataMember(Order = 3, IsRequired = false)]
public IList<string> ListValue { get; set; }
}
使用Serializer.GetProto生成的.proto文件将是:
message ForwardCurve {
required string Commodity = 1;
repeated Pair_String_Int32 DictValue = 2;
repeated string ListValue = 3;
}
那么什么是Pair_String_Int32(以及进入protobuffer字节流的内容)并且是否有任何映射方法,以便protobuf,使用protoc可以在Java中创建等效的映射代码?
答案 0 :(得分:2)
要实现此功能,请在生成的.proto文件中添加一条新消息,如下所示。
message Pair_String_Int32 {
required string Key = 1;
required int32 Value = 2;
}
然后protoc将能够为Java创建相应的代码。
答案 1 :(得分:1)
我可以稍后检查(我现在在iPod上)但是我相信它只是一个“重复”的虚拟类型集合,成员键= 1值= 2(使用每个的默认类型 - 所以c#字符串映射到proto字符串等)。我正在为v2重新实现GetProto,所以我将尝试确保输出中包含这些虚拟类型。