2012-02-13 189 views
3

是否有可能创建一个方法,从jsson解析泛型集合?上面的我的aproach不起作用,因为在运行时,gson在这里返回LinkedHasmaps的一个ArrayList,但是在编译时没有错误。Gson:解析泛型集合

private <T> ArrayList<T> readArray(String json) 
{ 
    Gson gson = new Gson(); 
    Type collType = new TypeToken<ArrayList<T>>() { 
    }.getType(); 
    return gson.fromJson(json, collType); 
} 

我已经在这里看到像一些类似的问题:Using a generic type with Gson,但我没有发现任何解决方案,真正起作用。

回答

0

默认情况下,在2.1版,如果你没有做任何事情,它会被反序列化一个List<Map<String,Object>>

您可以注册该集合类型TypeAdapterFactory,然后确定这个应该是什么样的对象实际上是反序列化的。

2

建议的解决方案。它似乎是真的简单的比大多数人认为:

Type collectionType = new TypeToken<ArrayList<Person>>(){}.getType(); 
ArrayList<Person> persons = gson.fromJson(response, collectionType); 

不需要复制ParameterizedTypeImpl类作为newacct在他的答案中建议。