2012-01-24 206 views
2

新版本的gson在集合的反序列化方面有很多變化。在我們使用TypeToken爲了從Json數組中檢索列表之前,TypeToken不再存在於庫中。是否有任何現在採取什麼方法的例子??一直在查看文檔,但對此不清楚。它建議實現JsonDeserializer接口,並使用GsonBuilder ... buit再次不明確。有沒有人有我們如何使用Gson反序列化集合的例子? 非常感謝。Gson反序列化集合

+0

哪個GSON版本你指的是?因爲我認爲所有最近版本的Gson仍然有'TypeToken'。 – Nikhil

+1

對不起,你是對的......我的困惑是因爲現在構造函數在2.1 jar中被聲明爲protected,所以下面這行代碼:Type typeOfCollectionOfFoo = new TypeToken >(){}。getType )不再有效。這是一個混亂。 – Pablo

+0

哦,好的。請在下面回答您的問題並將其標記爲答案。它可能會幫助別人! – Nikhil

回答

2

版本的谷歌GSON的2.1不再爲TypeToken類的公共構造函數,相反,我們應該利用其所提供的靜態方法之一:

IE:

List<MyClass> myList= new ArrayList<MyClass>(); 
Type listType = TypeToken.get(myList.getClass()).getType(); 
myList= (new Gson()).fromJson(jsonString, listType); 
+2

這是錯誤的......在這種情況下,listType將是java.util.LinkedHashMap,因此JSON會創建一個列表,其中每個元素都是該類的一個實例,當然,迭代列表時它將生成ClassCastExceptions。什麼是正確的方法來做到這一點?我沒有理由爲什麼2.1版本的GSON具有默認訪問構造函數... – Pablo