1. 程式人生 > >Gson解析時對於不確定泛型的處理

Gson解析時對於不確定泛型的處理

今天寫一個解析時後臺返回的物件不確定,不能每個物件都去寫個type
  1. Type type = new TypeToken<List<Info>>() {}.getType();  
  2.         Object fromJson2 = gson.fromJson(readContext, type);  
  3.         List<Info> list = (List<Info>) fromJson2;  
去解析,因為有好多個不一樣的物件,於是寫了個Object fromJson2 = gson.fromJson(jsonobject, class);然後把object物件強轉給對應的物件,結果怎麼執行都不行,報
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to appuccino.simplyscan.Objects.Folder錯誤
解決方案:
查看了一下LinkedTreeMap,可通過key來獲取value的map。與TreeMap不同的是,這類使用迭代順序插入順序。比較順序只作為一個優化的有效的插入和去除。它實現了Android 4.1的TreeMap類。所以在獲得object物件的時候Gson會把不同的泛型按key和value形式儲存起來,使用時只需要對LinkedTreeMap進行遍歷即可
LinkedTreeMap tm = (LinkedTreeMap)fromJson2;
Iterator it = tm.keySet().iterator();  
while (it.hasNext()) {  
String key = (String) it.next();
String value = (String)tm.get(key);
}