情况描述
序列化
一个map对象使用Gson转换成字符串的时候,默认是处理成了空字符串,需要指定
java.lang.reflect.Type 的类型 这样才能序列化成功
反序列化
反序列化的时候指定的类型如果是Map接口类型 ,这个时候反序列化的时候会出现异常(com.google.gson.JsonParseException) 把指定类型调整为Map的实现类后可以反序列化成功。也可以参考序列化的时候指定Type的方式,序列化和反序列化的时候指定相同的类型即可
public static void main(String[] args) {
HashMap<String, String> hashMap = new HashMap<String, String>() {
{
put("a", "a");
put("b", "b");
put("c", "c");
}
};
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
String json = gson.toJson(hashMap,new TypeToken<Map<String, String>>() {
}.getType());
System.out.println(json);
System.out.println(gson.fromJson(json, new TypeToken<Map<String, String>>() {
}.getType()));
json=JSON.toJSONString(hashMap);
System.out.println(json);
System.out.println(JSON.parseObject(json, Map.class));
System.out.println(gson.fromJson(json, Map.class)); // 异常
HashMap map = gson.fromJson(json, HashMap.class);
System.out.println(map); //
}