Json解析Object变成List处理方案

1.场景

后台接口某些情况会把某个key原本是Object对象变List返回。经常出现在对象为空的时候。理论上让接口处理,为了兼容老接口客户端也可以在解析的时候统一预处理下。

2.处理方案

自定义Gson类型适配器来处理对象结构变更处理,然后将自定的gson设置到Retrofit用到的**GsonConverterFactory.create(gson)**中即可

3.兼容案例

返回的w_userinfo字段在空的时候回变成[]集合返回,这个时候,客户端只需要将对应子对删除即可。这样的话,原先的通用解析方案都不用变更,只针对部分结构处理即可。

public class JsonCompat {

    private static WorkFlowBean FLOWBEAN = new WorkFlowBean();

    private static final Gson GSON = new Gson();

    public Gson create() {
        return new GsonBuilder().serializeNulls()
                //自定义类型适配器
                .registerTypeAdapter(WorkFlowBean.class, new WorkFlowBeanDefaultAdapter())
                .create();
    }

    private class WorkFlowBeanDefaultAdapter implements JsonDeserializer<WorkFlowBean> {

        @Override
        public WorkFlowBean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
            try {
                String error_1 = "w_userinfo";
                JsonObject object = json.getAsJsonObject();
                try {
                    object.getAsJsonObject(error_1);
                } catch (JsonParseException e) {
                    //出现异常,将对应字段删除
                    object.remove(error_1);
                }
                return GSON.fromJson(object, WorkFlowBean.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return FLOWBEAN;
        }
    }
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值