我想阻止Gson序列化特定类型的字段。为此,我创建了一个排除策略。排除策略确实成功识别出有问题的类何时被处理并且成功排除它。不幸的是,它阻止我序列化该类的对象,即使它们是根。我的意思是他们是传递给gson.toJson()方法的参数。
为了更清楚,我有一个类型为Person的类,其类字段本身涉及Person类型。我不想序列化Person类型的类字段。
public class Person{
private Person child;
private String name;
}
因此,在上面的示例中,我想要一个包含name
字段但不包含child
字段的json对象。我希望解决方案对字段的类型敏感,而不是字段名称。
答案 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();