何时使用google Gson的tojson方法接受类型作为参数? public String toJson(Object src,Type typeOfSrc)

我正在尝试使用Gson的toJson API将我的对象转换为JSON字符串。 当我遇到两个支持相同的API时。

根据文件 –

public String toJson(Object src)

请注意,如果任何对象字段都是generics类型,则此方法可以正常工作,只是对象本身不应该是generics类型。 如果对象是generics类型,请改用toJson(Object,Type)

public String toJson(Object src,Type typeOfSrc)

如果指定的对象是generics类型,则必须使用此方法。

我正在使用第一个API,它只接受Object作为参数,但是传递generics类型对象,我仍然能够成功获取JSON字符串。

码:

@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 list = new ArrayList(); list.add("Kishore"); list.add("Bandi"); return gson.toJson(list); 

输出:

 ["Kishore","Bandi"] 

那么第二个API将type作为参数的重要性是什么?

当您序列化/反序列化ParameterizedType时,将使用方法toJson(Object src, Type typeOfSrc)

根据文档 :

如果序列化/反序列化的对象是ParameterizedType(即包含至少一个类型参数并且可能是数组),则必须使用toJson(Object,Type)或fromJson(String,Type)方法。

示例(从文档中提取):

 Type listType = new TypeToken>() {}.getType(); List target = new LinkedList(); target.add("blah"); Gson gson = new Gson(); String json = gson.toJson(target, listType); List target2 = gson.fromJson(json, listType); 

ParameterizedType相关的问题: 参数化类型是什么意思?