异常com.google.gson.internal.StringMap cannot cast to..原因&解决方案

原创 2015年11月18日 10:51:00

异常信息

java.lang.ClassCastException: com.google.gson.internal.StringMap cannot cast to…

异常描述

  • 期望使用一个方法将JsonArray字符串转换为对象List,方法运行结束后,结果List中的对象不能识别为传入的T对象类型,而是识别为一个Map导致后续出错。

  • 方法如下

public static <T> List<T> getListFromJSON(String str, Class<T> type) {
        Type listType = new TypeToken<List<T>>(){}.getType();
        List<T> list = new Gson().fromJson(str, listType);
        return list;
}
  • 调用方式
List<Work> works = getListFromJSON(workJsonString, Work.class);

异常原因

  • 作为方法传入参数,Java编译过程会将泛型对象类型擦除。

解决方案

方案1

  • 直接copy方法内代码直接使用,而不通过方法传入

方案2

  • 方法如下
public static <T> List<T> stringToArray(String s, Class<T[]> clazz) {
            T[] arr = new Gson().fromJson(s, clazz);
            return Arrays.asList(arr);
        }
  • 调用方式
 List<Work> works = stringToArray(workgson, Work[].class);
版权声明:本文为博主原创文章,未经博主允许不得转载。

取出json解析出来的对象列表的元素时报错java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be

遇到这个问题的时候,debug显示在我要取出list里面的对象的时候报错。表面看上去代码没什么错误。比如:List. 其实这个问题是出现在解析出来的时候,java检查类型的时候不知道里面的类型是什么...
  • Uncle_Jeffery
  • Uncle_Jeffery
  • 2015年12月10日 21:50
  • 6923

Retrofit 泛型解析遇到com.google.gson.internal.LinkedTreeMap cannot be cast to object

在Retrofit网络请求数据,使用泛型解析json时,出现了com.google.gson.internal.LinkedTreeMap cannot be cast to com.xylife.c...
  • jdsjlzx
  • jdsjlzx
  • 2016年06月05日 23:55
  • 16836

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to

在做android解析服务器传来的json时遇到的错误。 服务器传来的数据格式 [{"title":"qq","aipPath":"/jeesite/userfiles/bda5e6b04dee47d...
  • wulinjie123
  • wulinjie123
  • 2016年09月19日 14:34
  • 6919

com.google.gson.internal.LinkedTreeMap cannot be cast to entity

问题: 后台报错: com.google.gson.internal.LinkedTreeMap cannot be cast to com.xie.Teacher 原因json转list的时候类...
  • wu_0916
  • wu_0916
  • 2017年07月29日 11:45
  • 882

com.google.gson.internal.LinkedTreeMap cannot be cast to test.UserBean at t..

Gson泛型解析Json报错:com.google.gson.internal.LinkedTreeMap cannot be cast to test.UserBean
  • Anddroid_LanYan
  • Anddroid_LanYan
  • 2015年06月19日 14:45
  • 14137

异常com.google.gson.internal.StringMap cannot be cast to XXX解决方案

02-15 07:20:06.485: E/AndroidRuntime(1766): java.lang.ClassCastException: com.google.gson.internal.S...
  • zml_2015
  • zml_2015
  • 2016年02月15日 16:14
  • 7096

Gson解析报错 java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to XXX

将 public static List getList(String jsonString, Class cls) { List list = new ArrayList...
  • Hender_
  • Hender_
  • 2016年05月17日 15:27
  • 2006

com.google.gson.internal.StringMap cannot be cast to

混淆配置里加入下面代码-keepattributes Signature -keep class sun.misc.Unsafe { *; } -keep class com.google.gson....
  • chunlongyuan
  • chunlongyuan
  • 2015年08月07日 17:51
  • 897

Cannot cast from View to CheckBox

切记:最好不要把类名,项目名定义成和组件名一样。。。。   很多同学在学习组件的时候,都喜欢把类名定义为该组件的名称,比如CheckBox和RadioButton之类的,这样就会导致控件包不能导入...
  • caiwenfeng_for_23
  • caiwenfeng_for_23
  • 2013年03月12日 19:47
  • 2191

Java8:使用新JS解释器Nashorn编译Lambda表达式

在最近的一篇文章中,我了解了一下Java8和Scala是如何实现 Lambda 表达式的。正如我们所知道的,Java8不仅对javac编辑器做了很大改进,它还加入了一个全新的项目---Nashorn...
  • tayanxunhua
  • tayanxunhua
  • 2014年03月11日 18:07
  • 9328
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:异常com.google.gson.internal.StringMap cannot cast to..原因&解决方案
举报原因:
原因补充:

(最多只允许输入30个字)