2016-11-19 45 views
0

当前我正在使用Gson将Java对象序列化为JSON。 我试图跳过一个类中的字段,但不在另一个类中。Gson:使用无注释排除特定类的字段 - 2

示例代码:

Class A { 
var a; 
var b; 
} 

Class B { 
var a; 
var c; 
} 

Class C { 
class A; 
class B; 
} 

我要排除一个一个,但不是在。我无法在域上放置注释,因为对象不属于我或者手动访问对象A并删除a。我正在寻找一些通用的方法。

类似的问题:Gson: How to exclude specific fields from Serialization without annotations 哪个答案由Nishant提供符合我的想法。但我觉得解决方案并不完全正确,因为下面的条件是错误的。

f.getDeclaringClass()==ç

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

我用Gson写了类似的自定义排除策略。随着排斥策略,我可以做以下

shouldSkipClass(类)

shouldSkipField(fieldAttributes)。

但我期待这两个组合都跳过,如果这个fieldAttributes只存在于提供的类中。

shouldSkipFieldUnderClass(类,fieldAttributes)

是否有任何其他的方法来达到同样的?或者我在上面做错了什么?请给我建议使用Gson跳过特定课程中的字段。

+0

道歉,找到了我的问题。我一直在使用getDeclaredClass而不是getDeclaringClass。这解决了我的问题。 –

回答

1

我要排除只在A,但不是B.

然后宣布领域一个transient

Class A { 
var transient a; 
var b; 
} 

Class B { 
var a; 
var c; 
} 

Class C { 
class A; 
class B; 
} 
+0

该模型来自外部服务,所以我不能修改它。 –