我一直在尝试使用gson从json字符串生成协议缓冲区消息。有没有人知道如果可以做到这一点?如何使用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,所以我不知道这是否与映射出了问题,反射系统没有检测到protobuffs字段或其他东西。如果有人知道如何做到这一点,那就太好了。顺便说一句我在这里谈论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
如果用的protobuf然后'可选的字符串this_is_a_message = 1生成的消息开放代码;'将成为'私人字符串this_is_a_message_;'笔记最后下划线和setters/getters。 –
@NikolayKuznetsov这样做的工作,但与语法'thisIsAMessage_'。现在的问题是,列表'thisIsAList_'是由一个'UnmodifiableLazyStringList'生成的,它在反序列化时抛出一个异常:\ – fmsf
什么异常?反序列化意味着在接收端? –