Gson实现接口自定义反序列化

"本文介绍了在Java中使用Gson反序列化时遇到接口类型无法实例化的问题,以及如何通过自定义JsonDeserializer解决。在多态场景下,由于无法确定具体实现类,导致Gson报错。解决方案是创建一个自定义反序列化器,根据json中的特定字段(如"type")注册各接口实现类,然后在反序列化时根据该字段找到对应的类进行实例化。"

 

在项目中同样遇到了对json字符串进行反序列化时,遇到了多态情况下,无法找到对应类,所以写这篇文章来mark一下

首先抛出原始代码,再给上解决方案~

原始代码:

原始json串:

{"type":"int","specs":{"min":"1","max":"12","unit":"aw","unitName":"饱和度","step":"1"}}

TslDataType对象,Type 为内部枚举类,TslSpecs为接口,对应枚举类类型的各个实现类

TslDataType:构造方法中type是通过tslSpecs的方法来给赋值的

import com.lbs.iot.beans.tsl.specs.TslSpecs;

public class TslDataType {
    private final Type type;

    private final TslSpecs specs;

    public TslDataType(TslSpecs specs) {
        this.type = specs.getType();
        this.specs = specs;
    }

    public Type getType() {
        return type;
    }

    public TslSpecs getSpecs() {
        return specs;
    }

    public  enum Type {
        INT("int"),
        TEXT("text"),
        DATE("date"),
        BOOL("bool"),
        ENUM("enum"),
        ARRAY("array"),
        FLOAT("float"),
        STRUCT("struct"),
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值