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