Java 如何使gson排除我的对象';什么是超类?

Java 如何使gson排除我的对象';什么是超类?,java,gson,Java,Gson,我正在尝试使用Gson进行序列化/反序列化。我不想考虑超类(它是抽象的),问题是我没有访问超类代码的权限 我尝试了一个排除策略,但没有成功 private class SuperClassExclusionStrategy implements ExclusionStrategy { @Override public boolean shouldSkipClass(Class<?> clazz) { return clazz.

我正在尝试使用Gson进行序列化/反序列化。我不想考虑超类(它是抽象的),问题是我没有访问超类代码的权限

我尝试了一个
排除策略
,但没有成功

private class SuperClassExclusionStrategy implements ExclusionStrategy {

        @Override
        public boolean shouldSkipClass(Class<?> clazz) {
            return clazz.equals(SuperClass.class);
        }

        @Override
        public boolean shouldSkipField(FieldAttributes field) {
            return false;
        }

    }

基于特定类类型排除字段和对象:

私有静态类SpecificClassExclutionStrategy实现了ExclutionStrategy{
私人最终课程不包括该课程;
公共特定类排除策略(类排除此类){
this.excludedThisClass=excludedThisClass;
}
公共布尔shouldSkipClass(类clazz){
返回排除该类。等于(clazz);
}
公共布尔值shouldSkipField(字段属性f){
返回excludedThisClass.equals(f.getDeclaringClass());
}
}

getDeclaringClass
该作业不执行
getDeclaredClass
@RenéLink否,OP希望排除特定类的所有字段,而不是某些类型的字段。也就是说(例如class Clazz{String f;}),如果要排除class Clazz的所有字段,那么我们应该使用“f.getDeclaringClass()==Clazz.class”,而不是“f.getDeclaredClass()==String.class”。假设有一个超类
哺乳动物
和一个子类
人类
。每当
哺乳动物
被直接传递给GSON时,我希望它被序列化。但是,每当GSON遇到
Human
对象时,我只希望GSON序列化
Human
特定的字段,而不是从
哺乳动物
继承的字段。
排除策略能否处理此问题?
private static class SuperClassExclusionStrategy implements ExclusionStrategy {

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

  public boolean shouldSkipField(FieldAttributes field) {
   return field.getDeclaringClass().equals(MySuperClass.class) && field.getName()
    .equals("id");
  }
 }
private static class SpecificClassExclusionStrategy implements ExclusionStrategy {
    private final Class<?> excludedThisClass;

    public SpecificClassExclusionStrategy(Class<?> excludedThisClass) {
        this.excludedThisClass = excludedThisClass;
    }

    public boolean shouldSkipClass(Class<?> clazz) {
        return excludedThisClass.equals(clazz);
   }

   public boolean shouldSkipField(FieldAttributes f) {
        return excludedThisClass.equals(f.getDeclaringClass()());
   }
}