Gson数据类型转换异常 java.lang.ClassCastException: com.google.gson.internal.出现原因已经解决方案 gson泛型指定

本文介绍了在使用Gson进行JSON到List数据对象转换时遇到的`java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to User`异常。问题根源在于Gson在处理有泛型的数据类型时需要指定泛型,通过`new TypeToken<List<User>>(){}.getType()`来指定类型,或者使用非泛型的实体类包裹。这两种方法可以避免转换异常。
摘要由CSDN通过智能技术生成

Gson数据类型转换异常 java.lang.ClassCastException: com.google.gson.internal.出现原因已经解决方案,

今天写项目发现了一个用gson做JSON串回List的数据对象时,报了这个错误,如下

        List<User> userList;
        userList=gson.fromJson((jsonStr),List.class);
        System.out.println(userList.get(0));
        System.out.println(userList.get(0).getUserName());

在这里插入图片描述
数据类型转化异常
但是userList.get(0)确实可以正常拿到相应的数据,但是第4行的,getUserName()却会报如上的异常。

经过了一番探索之后,发现是因为Gson在处理Json字符串和对象二者转换时,对于有泛型的数据类型,需要做一个泛型指定,如 List 等

//先来看一个错误的写法, 0 0 随便试的 我敢说肯定很多人也试过
        //userList=gson.fromJson(jsonStr,List<User>.class);
//正确操作
        userList=gson.fromJson(jsonStr,new TypeToken<List<User>>(){}.getType());

包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class com.google.gson.FieldNamingStrategy.class com.google.gson.Gson.class com.google.gson.GsonBuilder.class com.google.gson.InstanceCreator.class com.google.gson.JsonArray.class com.google.gson.JsonDeserializationContext.class com.google.gson.JsonDeserializer.class com.google.gson.JsonElement.class com.google.gson.JsonIOException.class com.google.gson.JsonNull.class com.google.gson.JsonObject.class com.google.gson.JsonParseException.class com.google.gson.JsonParser.class com.google.gson.JsonPrimitive.class com.google.gson.JsonSerializationContext.class com.google.gson.JsonSerializer.class com.google.gson.JsonStreamParser.class com.google.gson.JsonSyntaxException.class com.google.gson.LongSerializationPolicy.class com.google.gson.TreeTypeAdapter.class com.google.gson.TypeAdapter.class com.google.gson.TypeAdapterFactory.class com.google.gson.annotations.Expose.class com.google.gson.annotations.SerializedName.class com.google.gson.annotations.Since.class com.google.gson.annotations.Until.class com.google.gson.internal.ConstructorConstructor.class com.google.gson.internal.Excluder.class com.google.gson.internal.JsonReaderInternalAccess.class com.google.gson.internal.LazilyParsedNumber.class com.google.gson.internal.LinkedTreeMap.class com.google.gson.internal.ObjectConstructor.class com.google.gson.internal.Primitives.class com.google.gson.internal.Streams.class com.google.gson.internal.UnsafeAllocator.class com.google.gson.internal.bind.ArrayTypeAdapter.class com.google.gson.internal.bind.CollectionTypeAdapterFactory.class com.google.gson.internal.bind.DateTypeAdapter.class com.google.gson.internal.bind.JsonTreeReader.class com.google.gson.internal.bind.JsonTreeWriter.class com.google.gson.internal.bind.MapTypeAdapterFactory.class com.google.gson.internal.bind.ObjectTypeAdapter.class com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.class com.google.gson.internal.bind.SqlDateTypeAdapter.class com.google.gson.internal.bind.TimeTypeAdapter.class com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.class com.google.gson.internal.bind.TypeAdapters.class com.google.gson.reflect.TypeToken.class com.google.gson.stream.JsonReader.class com.google.gson.stream.JsonScope.class com.google.gson.stream.JsonToken.class com.google.gson.stream.JsonWriter.class com.google.gson.stream.MalformedJsonException.class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值