0
我有這樣的片段:Deserialzing工作在GSON-2.1,但不GSON-2.4.4
HashMap<String, List<ClassOne>> mappingMap = new HashMap<String, List<ClassOne>>();
String key = "pop";
ClassOne c1 = new ClassOne();
c1.setCategoryName("categoryName");
ArrayList<ClassOne> al = new ArrayList<ClassOne>();
al.add(c1);
mappingMap.put(key, al);
Gson gson = new Gson();
String data = gson.toJson(mappingMap);
HashMap<String, List<ClassOne>> dmm = gson.fromJson(data, new TypeToken<Map<String, List<ClassOne>>>() {}.getType());
它在與GSON-2.1.jar運行,它工作正常。當與GSON-2.2.4.jar運行我得到下面的異常
java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 不能轉換爲java.util.HashMap中的COM。 .....
想知道是否有人能解釋,或指出我做錯了什麼。
+1 - 更具體,只有它擺在首位的工作的原因是由於*純粹的運氣*這GSON使用'HashMap'當'Map'接口,通過傳遞在' TypeToken'。現在......不是。 –
是的,我相信這只是運氣,我發現。你的修復解決了這個問題。 –
更好的是,在參數類型和聲明類型兩邊使用'Map'。這將保持LinkedTreeMap的幕後,並且可以抵禦散列衝突DoS攻擊。 –