Java 反序列化适用于gson-2.1,但不适用于gson-2.4.4
我有一段话:Java 反序列化适用于gson-2.1,但不适用于gson-2.4.4,java,json,gson,Java,Json,Gson,我有一段话: 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<C
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());
HashMap-mappingMap=newhashmap();
String key=“pop”;
ClassOne c1=新的ClassOne();
c1.setCategoryName(“categoryName”);
ArrayList al=新的ArrayList();
加入(c1);
mappingMap.put(键,al);
Gson Gson=新的Gson();
String data=gson.toJson(mappingMap);
HashMap dmm=gson.fromJson(数据,new-TypeToken(){}.getType());
当使用gson-2.1.jar运行时,它可以正常工作。当使用gson-2.2.4.jar运行时,我得到以下异常
java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap
无法转换为com上的java.util.HashMap
想知道是否有人可以解释,或者指出我做错了什么 我不知道2.1的情况,但如果它确实起作用,那么Gson一定已经将其默认的
Map
实现更改为在Gson-2.2.4中将Map
类型从HashMap
反序列化为LinkedTreeMap
时使用
如果要继续使用HashMap
,请在TypeToken
中指定它
new TypeToken<HashMap<String, List<ClassOne>>>()
newtypetoken()
+1-更具体地说,它一开始工作的唯一原因是,当通过TypeToken
传入Map
接口时,Gson使用了HashMap
。现在。。。。不是。是的,我相信我找到它只是运气。您的修复解决了问题。谢谢!更好的是,在参数类型和声明类型的两侧使用Map
。这将使LinkedTreeMap处于幕后,并具有防止哈希冲突DoS攻击的保护。