fastjson转换List<T>,Map<T>泛型类型

本文介绍了解决使用fastjson将List序列化成JSON后,如何通过TypeReference反序列化回List的问题。重点讲解了TypeReference的getActualTypeArguments方法在高级反射中的应用,以及如何在JSON转换中指定返回类型。
摘要由CSDN通过智能技术生成

前言:
  目前开发,将List<T>转换为JSON字符串后,然后使用fastjson的JSONObject.parseObject(data, List.class)将JSON字符串转换回List<T>使用会报错,但是List.class部分又无法定义泛型,现出具转换方法。

场景

User user1 = new User();
User user2 = new User();
List<User> users = new Arraylist<>();
users.add(user1);
users.add(user2);
//利用fastjson将users转换为json字符串
String usersStr = JSON.toJSONString(users);
/*
 * 普通将json字符串还原
 * 这种方式无法定义返回格式为List<User>,如果此时将以下还原的list强转
 * List<User>会报错。java.lang.ClassCastException转型错误。
 */
List list = JSONObject.parseObject(usersStr,List.class);

解决方式

  fastjson提供了TypeReference这个类,对进行序列化的反序列化,使用TypeReference可以明确的指定反序列化的类型

List<Users> list = JSONObject.parseObject(usersStr,new TypeReference<List<Users>>(){});

解读

  查看TypeReference源码的构造函数TypeReference源码的构造函数
  核心方法:getActualTypeArguments,该方法在高级反射用于实例化泛型bean中使用过,作用是获取父类泛型类型。
其中ParameterizedType是一个记录类型泛型的接口, 继承自Type,一共三方法:
(1)返回泛型类型数组: Type[] getActualTypeArguments();
(2)返回原始类型Type: Type getRawType();
(3)返回 Type 对象,表示此类型是其成员之一的类型: Type getOwnerType();

结尾

  本次牵扯到getActualTypeArguments和ParameterizedType为高级反射中内容,在泛型中用处很大,具体其他用处在后续博客中会进行更新。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值