gson排除策略只适用于目标对象的字段

gson exclusion strategy apply only to fields of target object

我想阻止 Gson 序列化特定类型的字段。为此,我创建了一个排除策略。排除策略确实成功地识别了正在处理的 class 并且它确实成功地排除了它。不幸的是,它阻止我序列化 class 的对象,即使它们是根。我的意思是它们是传递给 gson.toJson() 方法的参数。

更清楚地说,我有一个 class 类型的 Person 和 class 字段,这些字段本身涉及 Person 类型。我不想序列化 Person 类型的 class 个字段。

public class Person{
   private Person child;
   private String name;
}

因此,在上面的示例中,我想要一个包含 name 字段但不包含 child 字段的 json 对象。我希望解决方案对字段类型敏感,而不是字段名称。

一个ExclusionStrategy定义了两种方法,一种排除类型,一种排除字段。只需使用 field 方法跳过 Person.

类型的任何字段
class PersonExcluder implements ExclusionStrategy {
    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        return f.getDeclaredType().equals(Person.class);
    }

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

那就用注册吧

Gson gson = new GsonBuilder().setExclusionStrategies(new PersonExcluder()).create();