Protobuf-net对Dictionary / KeyValuePair的支持如何工作?

时间:2010-10-06 15:13:57

标签: protocol-buffers protobuf-net

我想了解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中创建等效的映射代码?

2 个答案:

答案 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,所以我将尝试确保输出中包含这些虚拟类型。