我怎样才能让gson排除我的对象的超类?

wi3ka0sx  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(200)

我尝试使用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");
  }
 }
46scxncf

46scxncf1#

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

ctehm74n2#

另一种方法是:

builder.excludeFieldsWithoutExposeAnnotation();

然后只显式公开要公开的字段。

相关问题