Gson中忽略特定字段(记录)

在使用Gson库将Java子类B转换为JSON时,如果希望避免包含父类A的'name'字段,可以采取特定策略。本文记录了这一过程,包括相关代码示例,以供后续参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gson中忽略特定字段(记录一下,便于查找)

场景

        父类A中有多个属性,其中个字段name,子类B继承父类A。子类B在生成json时,想要去掉父类A中的name字段。(该json的生成是用Gson库)

代码如下:

父类代码

public class MyFather {
    private String name;
    private String sex;
    private String height;
    private String weight;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getHeight() {
        return height;
    }

    public void setHeight(String height) {
        this.height = height;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 标记是否有name这个字段
     *
     * @return
     */
    public boolean isHaveName() {
        return true;
    }
}

子类

public class MySon extends MyFather {
    private String job;

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    @Override
    public boolean isHaveName() {
        return false;//去掉特定的字段的标记
    }

    @Override
    public String toString() {
        return "MySon{" +
                "job='" + job + '\'' +
                "super.toString[" + super.toString() +
                "]}";
    }
}

运行代码

public class GsonTest {

    public static void main(String[] args) {
        MySon sonModel = new MySon();
        sonModel.setAge(11);
        sonModel.setJob("学生");
        sonModel.setHeight("170");
        sonModel.setSex("男");
        sonModel.setWeight("110");
        //
        Gson gson = new GsonBuilder().addSerializationExclusionStrategy(new MyExclusionStrategy(sonModel)).create();
        //生成json
        String gsonStr = gson.toJson(sonModel);
        System.out.println("===========gsonStr:" + gsonStr);
    }

    static class MyExclusionStrategy implements ExclusionStrategy {
        MyFather mMyFather;

        public MyExclusionStrategy(MyFather mMyFather) {
            this.mMyFather = mMyFather;
        }

        @Override
        public boolean shouldSkipField(FieldAttributes f) {
            if (!mMyFather.isHaveName() && f.getName() == "name") {
                return true; //过滤掉name字段
            }
            return false;
        }

        @Override
        public boolean shouldSkipClass(Class<?> clazz) {
            return false;
        }
    }

}

补充:

gson库:
implementation 'com.google.code.gson:gson:2.6.2'

大神网址:

Kotlin中Gson解析忽略特定字段问题解析(@Expose,@SerializedName)

JAVA使用Gson排除特定字段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来了就未晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值