我正在尝试使用 Gson 的 toJson API 将我的对象转换为 JSON 字符串。
当我遇到 2 个支持相同功能的不同 API 时。
根据文档 -
公共字符串 toJson(对象 src)
请注意,如果任何对象字段是泛型类型,则此方法可以正常工作,只是对象本身不应该是泛型类型。如果对象是泛型类型,则使用 toJson(Object, Type) 代替.
公共字符串toJson(对象src,类型typeOfSrc)
如果指定的对象是泛型类型,则必须使用此方法。
我正在使用第一个 API,它只接受 Object 作为参数,但是传递通用类型对象,我仍然能够成功获取 JSON 字符串。
Code:
@GET
@Path("/getList")
@Produces(MediaType.APPLICATION_JSON)
public String getList()
{
Gson gson = new GsonBuilder().create();
List list = new ArrayList();
list.add(new Message("kishore", " Bandi "));
list.add(new Message("test", " values "));
return gson.toJson(list);
}
我收到的 XML 响应:
[
{
"name": "kishore",
"text": " Bandi ",
"dontSend": "Hope not received",
"iAmEmpty": ""
},
{
"name": "test",
"text": " values ",
"dontSend": "Hope not received",
"iAmEmpty": ""
}
]
即使我使用参数化类型,响应也是相同的。
Gson gson = new GsonBuilder().create();
List<String> list = new ArrayList<String>();
list.add("Kishore");
list.add("Bandi");
return gson.toJson(list);
Output:
["Kishore","Bandi"]
那么第二个以类型为参数的API有什么意义呢?
方法toJson(Object src, Type typeOfSrc)
当您序列化/反序列化时使用ParameterizedType
.
As per docs:
如果您要序列化/反序列化的对象是
ParameterizedType(即包含至少一个类型参数并且可以
是一个数组)那么你必须使用 toJson(Object, Type) 或
fromJson(String, Type) 方法。
示例(摘自文档):
Type listType = new TypeToken<List<String>>() {}.getType();
List<String> target = new LinkedList<String>();
target.add("blah");
Gson gson = new Gson();
String json = gson.toJson(target, listType);
List<String> target2 = gson.fromJson(json, listType);
相关问题ParameterizedType
: 参数化类型是什么意思?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)