Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反序列化适用于gson-2.1,但不适用于gson-2.4.4_Java_Json_Gson - Fatal编程技术网

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攻击的保护。