Gson:解析泛型集合

时间:2012-02-13 10:20:20

标签: java generics gson

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

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,但我找不到任何解决方案,这确实有效。

3 个答案:

答案 0 :(得分:3)

TypeToken的东西要求你在编译时修改类型参数。像ArrayList<String>或其他什么。 ArrayList<T>无效。

如果您可以在运行时以某种方式获取T传递的类对象,那么您可以尝试我在How do I build a Java type object at runtime from a generic type definition and runtime type parameters?中建议的解决方案

答案 1 :(得分:2)

它似乎比大多数人想象的要简单得多:

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

无需将ParameterizedTypeImpl类复制为其答案中建议的newacct。

答案 2 :(得分:0)

默认情况下,在v2.1中,如果您不执行任何操作,则会对其进行反序列化List<Map<String,Object>>

您可以为该Collection类型注册一个TypeAdapterFactory,然后确定实际反序列化的对象类型。

相关问题