2012-02-13 234 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在他的答案中建議。