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

时间:2015-10-30 02:27:58

标签: java serialization gson field

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

为了更清楚,我有一个类型为Person的类,其类字段本身涉及Person类型。我不想序列化Person类型的类字段。

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

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

1 个答案:

答案 0 :(得分:1)

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();