工作后就很少更新博客,这两天在Json解析的时候遇到问题,空了正好记录下。
问题
将后端获取数据转换成客户端创建的模型,然后转换成Json串存入数据库。当在无网络的情况下,则会从数据库从取出数据转换成客户端创建的模型。这些模型中有所有非基本数据类型字段都是用接口表示,在这将对象转成json的时候没有问题,但是反过来将json转成对象的时候却发现失败了,示例代码如下:
Gson gson = new Gson();
gson.fromJson(jsonData, Model.class);
这是因为在转换成对象的时候,Gson并不知道该接口对应的实现类是什么,导致转换失败。
解决方案
在查阅资料后得知Gson提供了一个叫“TypeAdapter”的东西,它可以拦截解析的过程,用户可以指定jsonObject所对应的类型。具体Gson实现原理可以参考这篇文章 ,借用文章中的一张图
从图中可以知道,我们在创建gson对象的时候可以利用GsonBuilder注入一个自定义的TypeAdapter对象拦截解析过程从而处理目标对象中一些特殊的字段。