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();
我想阻止 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();