美文网首页住家
Json反序列化之一个属性对多种数据结构

Json反序列化之一个属性对多种数据结构

作者: 洛草为王 | 来源:发表于2018-07-29 13:16 被阅读632次

    先抛出我所遇到的问题:对象中的一个属性对应多种数据结构如何反序列化?不同的type对应不同数据结构的data,如下图,


    数据实体.png

    对于这样的场景我先说下两种不完美的解决方案:
    方案一:统一用Object定义字段来接收数据,然后根据type再用json转成对应的对象。如下图,


    方案一.png

    虽然解决了问题,缺点也很明显,多次解析耗费CPU,而且很不优雅。作为程序员每次看到这样的代码,心中肯定有草泥马在奔腾。尤其是这样的代码是别人写的。这种方案不推荐使用。

    方案二:数据结构拆分,就是让每个属性只对应一种数据结构。如下图,


    方案二.png

    这种方案比方案一的优势在于无需多余的解析,节省CPU资源。但也是有缺陷的,如果type类型很多,model中的字段也会变得很多。而且服务端新增类型就需要手动修改一次model。我们之前一值采用这种解决方案,但总感觉有更好的方案。所以也一直没有放弃探索。黄天不负有心人啊,终于在最近找到了非常优雅的解决方案。
    主角登场,此处应该有掌声啊!他就是TypeAdapter,可以自定义model反序列化。那就让我们来看看,最终的解决方案,如下图,


    优雅的方案.png

    先自定义一个JsonDeserializer反序列化的类,然后在deserialize方法中来实现我们自己的反序列化逻辑。这里我用的是Gson的注解方式@JsonAdapter来实现的。

    相关文章

      网友评论

        本文标题:Json反序列化之一个属性对多种数据结构

        本文链接:https://www.haomeiwen.com/subject/umyzmftx.html