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バイトストリームに入るもの)とは何ですか?protobfが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#文字列は次のようにマップされます)。プロトストリングなど)。GetProto for v2を再実装している最中なので、これらのダミータイプが出力に含まれるようにします。

于 2010-10-06T16:25:54.917 に答える