是否可以创建一个从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,但我找不到任何解决方案,这确实有效。
答案 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,然后确定实际反序列化的对象类型。