Gson: アノテーションなしで特定のフィールドをシリアル化から除外する方法 質問する

Gson: アノテーションなしで特定のフィールドをシリアル化から除外する方法 質問する

私はGsonを学ぼうとしていますが、フィールド除外に苦労しています。これが私のクラスです

public class Student {    
  private Long                id;
  private String              firstName        = "Philip";
  private String              middleName       = "J.";
  private String              initials         = "P.F";
  private String              lastName         = "Fry";
  private Country             country;
  private Country             countryOfBirth;
}

public class Country {    
  private Long                id;
  private String              name;
  private Object              other;
}

firstNameGsonBuilder を使用して、やなどのフィールド名に ExclusionStrategy を追加することはできますcountryが、 などの特定のフィールドのプロパティを除外することはできないようですcountry.name

メソッドを使用するとpublic boolean shouldSkipField(FieldAttributes fa)、FieldAttributes には、 のようなフィルターとフィールドを一致させるのに十分な情報が含まれていませんcountry.name

PS: これを改善し、正規表現を使用してフィールドをフィルター処理したいので、注釈は避けたいと思います。

編集:私は、次の動作をエミュレートできるかどうかを確認しようとしていますStruts2 JSONプラグイン

Gsonを使用する

<interceptor-ref name="json">
  <param name="enableSMD">true</param>
  <param name="excludeProperties">
    login.password,
    studentList.*\.sin
  </param>
</interceptor-ref>

編集:次の内容を追加して質問を再開しました:

この問題をさらに明確にするために、同じタイプの 2 番目のフィールドを追加しました。基本的に、 を除外したいのですcountry.nameが、 は除外したくありませんcountrOfBirth.name。また、 Country をタイプとして除外したくありません。つまり、タイプは同じであり、オブジェクト グラフ内の実際の場所を特定して除外したいのです。

ベストアンサー1

一般的にシリアル化したくないフィールドには、「transient」修飾子を使用する必要があります。これは、json シリアライザーにも適用されます (少なくとも、gson を含む私が使用したいくつかのシリアライザーには適用されます)。

シリアル化された JSON に名前を表示したくない場合は、一時的なキーワードを指定します。例:

private transient String name;

詳細はGsonのドキュメントをご覧ください

おすすめ記事