2016-10-18 41 views
0

對象的列表對象內我有兩個類A和B: 下面是代碼:如何忽略短暫的領域定義是使用GSON

Class A{ 
    private String field1; 
    private List<B> list = new ArrayList<B>(); 
} 

Class B{ 
private transient field2; 
} 

使用GSON API如何排除瞬態場GsonBuilder類中的類B. excludeFieldsWithModifiers方法將僅排除A類但不包含B類的瞬態場,因爲A類包含B類對象的列表,而field2則在B類中定義。

回答

2

Gson序列化爲List<B>時,它將實際上序列化列表內容。當然,它會跳過內容模型中的瞬態字段。

+0

@IIyaGulya所以你的意思是說,類必須爲此實現Serializable接口。 –

+0

不,他們從來沒有說過你必須實現'Serializable'。 GSON使用反射來確定它將會爲什麼而不會序列化,並且它不_序列化瞬態字段。 – Qix

+0

實現可序列化後其工作正常 –

1

默認情況下,如果您將某個字段標記爲臨時字段,則該字段將被排除。同樣,如果一個字段被標記爲「靜態」,那麼默認情況下它將被排除。 如果您已經使用下面的語句某處B類,它將包括瞬態領域和上述情況僅排除指定的組合,「靜態」

Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.STATIC).create(); 

您可以添加短暫的修正,以排除短暫領域well:

import java.lang.reflect.Modifier; 

Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT).create(); 

這將排除所有瞬態字段和您添加的任何以前的修飾符。