2016-10-18 3 views
0

を使用してオブジェクトのリストにあるオブジェクトの内部で定義する私は2つのクラスAとBを持っている:過渡フィールドを除外する方法gson APIを使用してがGSON

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

Class B{ 
private transient field2; 
} 

:以下 コードですクラスAがクラスBとFIELD2のオブジェクトの一覧がGsonList<B>をシリアライズするとき、それは意志クラスBに

答えて

2

を定義している含まれているようGsonBuilderクラスのクラスBのexcludeFieldsWithModifiers方法だけではなく、クラスBのクラスAの過渡フィールドを除外しますリストの内容を実際にシリアル化します。もちろん、コンテンツモデルの一時的なフィールドをスキップします。

+0

@IIyaGulyaなので、そのクラスはそのためにSerializableインターフェイスを実装しなければならないと言っています。 –

+0

いいえ、彼らはあなたが 'Serializable'を実装しなければならないとは決して言いませんでした。 GSONはリフレクションを使用して、あなたのためにシリアライズするかどうかを決定しますが、一時フィールドをシリアル化することはありません。 – Qix

+0

シリアライズ可能な実装後、その正常に動作します。 –

1

デフォルトでは、フィールドを一時的なものとしてマークすると、フィールドは除外されます。また、フィールドが「静的」としてマークされている場合、デフォルトではフィールドは除外されます。 あなたは、クラスBのためにどこかに次のステートメントを使用している場合、それはあなたがなどの一時フィールドを除外するためにtransient修飾子を追加することができた場合

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

にtransientのフィールドが含まれており、唯一の指定された修飾子を除外し、「静的」になりますwell:

import java.lang.reflect.Modifier; 

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

これで、追加したすべての一時フィールドと以前の修飾子は除外されます。