fastjson序列化是怎么实现JSON的序列化和反序列化的

在使用springmvc时我们通常会定义类似這样的通用类与前端进行交互,以便于前端可以做一些统一的处理:


  

这样的类序列化为json后js反序列化处理起来毫无压力。但是如果rest接口的消费端就是java呢java泛型的类型擦除却容易引入一些障碍。

先定义一个类后面的例子会用到:


  

  

当拿到上面的数据时,我们想到其对应的类型昰Result所以得想办法将这个json数据反序列化为这个类型才行。

有了v3的经验以为找到了通用处理的捷径,遂封装了一个处理这种类型的工具方法:


  

并且把采用v3的地方改用了此parseResult方法:


  

以为万事大吉连测都没测试就把代码提交了。测都不测试当然难以有好结果了:


  

  

试了一下Result形式嘚,parseResultV1可以成功将其反序列化推测(没有看fastjson序列化具体实现)是fastjson序列化刚好检测到data字段就是String类型,并将其赋值到data字段上了仔细看parseObject并没有報错,而是在getData()时报错的联系到,应该把data当作Object类型这么看:


  

原来TypeReference的构造器是可以传入参数的


  

这个可以真的可以完美反序列化Result了。

后来发現parseResultV2无法处理类似Result>原来TypeReference无法处理嵌套的泛型(这里指的是类型参数未确定,而不是类似Result>类型参数已经确定)借用里的方法,新增加一个專门处理List类型的方法:


  

或者根据这里只有两层简单如下:


  

todo: 上面两个方法已经可以满足现有需要,有时间再看看能否将两个方法统一为一個


我要回帖

更多关于 fastjson序列化 的文章

 

随机推荐