只需使字段瞬态(如中private transient int field = 4;
)。GSON 明白这一点。
编辑
无需内置注解;Gson 允许您插入自己的策略来排除字段和类。它们不能基于路径或嵌套级别,但注释和名称很好。
如果我想跳过“my.model.Person”类中名为“lastName”的字段,我可以编写如下排除策略:
class MyExclusionStrategy implements ExclusionStrategy {
public boolean shouldSkipField(FieldAttributes fa) {
String className = fa.getDeclaringClass().getName();
String fieldName = fa.getName();
return
className.equals("my.model.Person")
&& fieldName.equals("lastName");
}
@Override
public boolean shouldSkipClass(Class<?> type) {
// never skips any class
return false;
}
}
我也可以自己做注释:
@Retention(RetentionPolicy.RUNTIME)
public @interface GsonRepellent {
}
并将方法重写shouldSkipField
为:
public boolean shouldSkipField(FieldAttributes fa) {
return fa.getAnnotation(GsonRepellent.class) != null;
}
这将使我能够执行以下操作:
public class Person {
@GsonRepellent
private String lastName = "Troscianko";
// ...
要使用自定义排除策略,请使用构建器构建 Gson 对象:
Gson g = new GsonBuilder()
.setExclusionStrategies(new MyOwnExclusionStrategy())
.create();