如何让gson排除我对象的超类?

时间:2014-03-31 14:17:20

标签: java gson

我正在尝试使用Gson序列化/反序列化。我不想要考虑超类(抽象),问题是我无法访问超类代码。

我试过了ExclusionStrategy,但它没有用。

private class SuperClassExclusionStrategy implements ExclusionStrategy {

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

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

    }

我该如何解决这个问题?

修改

我需要忽略超类中的字段,这是因为我收到此错误:MyClass declares multiple JSON fields named。 我无法更改冲突的字段名称。

解决方案:

解决了以下策略:

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");
  }
 }

1 个答案:

答案 0 :(得分:7)

来自Gson documentation

  

根据特定的班级类型排除字段和对象:

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