Gson:在没有注释的情况下排除特定类的字段 - 2

时间:2016-11-19 15:01:04

标签: java json serialization gson

目前我正致力于使用Gson将java对象序列化为JSON。 我试图跳过课堂上的一个字段而不是另一个课程。

示例代码:

Class A {
 var a;
 var b;
}

Class B {
 var a;
 var c;
}

Class C {
 class A;
 class B;
}

我想仅在 A 上排除 a ,但不在 B 上排除。我无法在字段上添加注释,因为对象不归我所有或访问对象 A 并手动删除 a 。我正在寻找一些通用的方法。

类似的问题:Gson: How to exclude specific fields from Serialization without annotations Nishant提供的答案符合我的想法。但是我认为解决方案并不完全正确,因为如果出现错误,下面的条件就会出现。

  

f.getDeclaringClass()== c

GetDeclaringClass返回类的类型而不是父类。

我使用Gson编写了类似的自定义排除策略。使用排除策略,我可以执行以下操作

  

shouldSkipClass(class)

     

shouldSkipField(fieldAttributes)。

但是如果这个fieldAttributes只出现在提供的类中,我期待两者的结合。

  

shouldSkipFieldUnderClass(class,fieldAttributes)

还有其他方法可以实现同样的目标吗?或者我上面做错了什么?请提供建议,使用Gson跳过特定课程中的字段。

1 个答案:

答案 0 :(得分:1)

  

我想在A上排除一个,但不在B上排除。

然后将字段 a 声明为transient

Class A {
 var transient a;
 var b;
}

Class B {
 var a;
 var c;
}

Class C {
 class A;
 class B;
}