跟我撩fastjson-第三章:Java泛型的序列化和反序列化

我们在第二章中讲解的集合例子中,集合中数据类型都是简单的String类型。现在我们来一个稍微复杂点的,List中存放的是User对象实例,那么应该如何序列化和反序列化呢?我们直接上代码。

   /**
     * Java泛型的序列化和反序列化
     */
    @Test
    public void run4(){
        User user = new User();
        user.setId(88888L);
        user.setAge(25);
        user.setName("张三");

        List<User> userList = new ArrayList<User>();
        userList.add(user);

        String jsonString = JSON.toJSONString(userList);
        System.out.println("序列化之后:"+jsonString);

        List<User> newList = JSON.parseObject(jsonString, List.class);
        System.out.println("反序列化之后:"+newList);
        System.out.println("反序列化之后:"+newList.get(0).getClass());
    }

程序输出结果:
序列化之后:[{“age”:25,”id”:88888,”name”:”张三”}]
反序列化之后:[{“name”:”张三”,”id”:88888,”age”:25}]
反序列化之后:class com.alibaba.fastjson.JSONObject

反序列化之后,我们希望得到的是一个User列表,但是从上面执行结果来看,并不是一个User列表,而是fastjson的JSONOject对象(其实JSONOject就是一个大Map)的列表。那么应该如何处理才能得到我们想要的结果呢?其实也很简单,就是在解析时,我们传入一个TypeReference实例作为参数即可。

    @Test
    public void run4(){
        User user = new User();
        user.setId(88888L);
        user.setAge(25);
        user.setName("张三");

        List<User> userList = new ArrayList<User>();
        userList.add(user);

        String jsonString = JSON.toJSONString(userList);
        System.out.println("序列化之后:"+jsonString);

        List<User> newList = JSON.parseObject(jsonString, new TypeReference<List<User>>(){});
        System.out.println("反序列化之后:"+newList);
        System.out.println("反序列化之后:"+newList.get(0).getClass());
   }

这次我们来看看输出结果如何

序列化之后:[{“age”:25,”id”:88888,”name”:”张三”}]
反序列化之后:[User{id=88888, name=’张三’, age=25}]
反序列化之后:class com.xgl.util.study.model.User

其实我们可以将

List<User> newList = JSON.parseObject(jsonString, new TypeReference<List<User>>(){});

替换为

List<User> newList = JSON.parseArray(jsonString, User.class);

这样也能解决这个泛型问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值