4

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

4

2 回答 2

2

为了让它工作,向生成的 .proto 文件添加一条新消息,如下所示。

message Pair_String_Int32 {
 required string Key = 1;
 required int32 Value = 2;    
}

然后 protoc 将能够为 Java 创建相应的代码。

于 2010-10-07T08:14:56.243 回答
1

我可以稍后检查(我现在在 iPod 上),但我相信它只是一个“重复”的一组虚拟类型,成员 key=1 value=2 (使用每个的默认类型 - 所以 c# 字符串映射到原型字符串等)。我正在为 v2 重新实现 GetProto,因此我将尝试确保这些虚拟类型包含在输出中。

于 2010-10-06T16:25:54.917 回答