0
我在解析GSON的通用ArrayList
时遇到了一些麻烦。我已经确认,如果指定了ArrayList
的特定类型(不使用泛型),则此方法有效,但我想编写一种与泛型兼容的方法。使用GSON解析通用ArrayList
基于其他堆栈溢出的问题,这应该工作,我真的不明白为什么它不。它不能解析ArrayList
,所以我得到的是LinkedTreeMap
的集合。通用方法如下:
public <T> List<T> listFromJson(@NonNull Class<T> classOfT) throws JsonSyntaxException {
if (data == null)
return null;
Gson gsonParser = new Gson();
TypeToken<ArrayList<T>> token = new TypeToken<ArrayList<T>>() {};
return gsonParser.fromJson(gsonParser.toJson(data), token.getType());
}
编辑:data
只是一个Object
包含要解析的JSON。指令gsonParser.toJson(data)
工作得很好。
我打电话像这样,在MyClass
可能是任何定制的java类,我写:
List<MyClass> resList = result.listFromJson(MyClass.class);
任何帮助,将不胜感激,我真的不知道是什么问题,但它确实与模板有关,因为非泛型方法可以完成这项工作。
EDIT2:只是为了澄清,我也包括非泛型方法,它的工作:
public List<MyClass> listFromJson() throws JsonSyntaxException {
Type listType = new TypeToken<ArrayList<MyClass>>(){}.getType();
Gson gsonParser = new Gson();
return gsonParser.fromJson(gsonParser.toJson(data), listType);
}
你好,抱歉很久没有回答,但我现在很忙。 我使用gson版本1.19,从maven管理。我需要继续使用这个版本。 请尝试使用某些属性定义一个自定义类,然后用它测试该方法,但这不适用于我。这篇文章原本是针对android的,但是在Java中测试了这个方法,并且我得到的是一个LinkedHashMap作为解析过程的结果......不知道为什么 –
JorgeGRC