ホームページ >Java >&#&チュートリアル >アノテーションなしで特定の Gson フィールド プロパティを除外するにはどうすればよいですか?

アノテーションなしで特定の Gson フィールド プロパティを除外するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-12 13:04:10837ブラウズ

How Can I Exclude Specific Gson Field Properties Without Annotations?

Gson シリアル化から特定のフィールド プロパティを除外する

Gson では、カスタム フィールド除外戦略を通じて、アノテーションを使用せずに特定のフィールド プロパティを除外できます。 ExclusionStrategy インターフェイスを実装すると、要件に基づいて除外基準をカスタマイズできます。

1 つのアプローチは、Gson が提供する FieldAttributes オブジェクトに基づいてフィールド除外戦略を作成することです。 FieldAttributes はネストされたプロパティへの直接のアクセスを提供しませんが、リフレクションを使用してオブジェクト グラフを走査して、特定のフィールド プロパティの組み合わせを確認できます。

たとえば、国を除外します。 name プロパティでは、次の除外戦略を使用できます。

public class FieldExclusionStrategy implements ExclusionStrategy {

    private List<String> excludedProperties;

    public FieldExclusionStrategy(List<String> excludedProperties) {
        this.excludedProperties = excludedProperties;
    }

    @Override
    public boolean shouldSkipField(FieldAttributes fieldAttributes) {
        String fieldName = fieldAttributes.getName();
        for (String excludedProperty : excludedProperties) {
            if (fieldName.startsWith(excludedProperty)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return false;
    }
}

たとえば、次のように除外戦略を使用します。

Gson gson = new GsonBuilder()
                .setExclusionStrategies(new FieldExclusionStrategy(Arrays.asList("country.name")))
                .create();

または、SerializedName アノテーションを使用して、同様の結果を得ることができます。 country.name プロパティに @SerializedName(value = "my CountryName") の注釈を付けることで、シリアル化中に使用されるプロパティのカスタム名を指定できます。これにより、元の country.name プロパティを JSON 出力から除外できます。

以上がアノテーションなしで特定の Gson フィールド プロパティを除外するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。