gson を使用して JSON 文字列からプロトコル バッファ メッセージを生成しようとしています。それが可能かどうか誰にもわかりませんか?
私はすでに試しました:
Gson gson = new Gson();
Type type = new TypeToken<List<PROTOBUFFMESSAGE.Builder>>() {}.getType();
List<PROTOBUFFMESSAGE.Builder> list = (List<PROTOBUFFMESSAGE.Builder>) gson.fromJson(aJsonString, type);
と
Gson gson = new Gson();
Type type = new TypeToken<List<PROTOBUFFMESSAGE>>() {}.getType();
List<PROTOBUFFMESSAGE> list = (List<PROTOBUFFMESSAGE>) gson.fromJson(aJsonString, type);
json 内のメッセージは、プロトコル バッファと同じ名前を使用します。
message PROTOBUFFMESSAGE {
optional string this_is_a_message = 1;
repeated string this_is_a_list = 2;
}
jsonにつながります:
[
{
"this_is_a_message": "abc",
"this_is_a_list": [
"123",
"qwe"
]
},
{
"this_is_a_message": "aaaa",
"this_is_a_list": [
"foo",
"bar"
]
}
]
正しい数の PROTOBUFFMESSAGE を含むリストが生成されますが、それらにはすべてのフィールドが null に含まれているため、これがマッピングの問題なのか、リフレクション システムがプロトバフ フィールドを検出しないのか、それ以外の問題なのかはわかりません。誰かがこれを行う方法を知っていれば、それは素晴らしいことです。ところで、私はここで Java について話している。
編集:
json の名前を次のように変更します。
{
"thisIsAMessage_": "abc",
"thisIsAList_": [
"123",
"qwe"
]
}
デシリアライゼーションを実現します。そして、スローするリストを除いて機能します:
java.lang.IllegalArgumentException: Can not set com.google.protobuf.LazyStringList field Helper$...etc big path here...$PROTOBUFFMESSAGE$Builder.thisIsAList_ to java.util.ArrayList