2016-11-19 46 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

該模型來自外部服務,所以我不能修改它。 –