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

时间:2016-02-24 11:48:03

标签: java gson

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

  

根据文件 -

     
    

public String toJson(Object src)

         
      

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

    
         

public String toJson(Object src,Type typeOfSrc)

         
      

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

    
  

我正在使用第一个API,它只接受Object作为参数,但是传递泛型类型对象,我仍然能够成功获取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<String> list = new ArrayList<String>();
        list.add("Kishore");
        list.add("Bandi");
        return gson.toJson(list);

输出:

["Kishore","Bandi"]

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

1 个答案:

答案 0 :(得分:2)

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

根据docs

  

如果您正在序列化/反序列化的对象是   ParameterizedType(即包含至少一个类型参数并且可以   是一个数组)然后你必须使用toJson(对象,类型)或   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);


ParameterizedTypeWhat is meant by parameterized type?

相关的问题