web-dev-qa-db-ja.com

Gsonを使用したAndroidの@SerializedNameアノテーションの基本的な目的は何ですか

@ SerializedName Androidのアノテーションの基本的な目的は何ですかGsonを使用して

いくつか例を挙げてください。私はそれを使用する主な目的を理解できません。

91
Muhammad Ali

Javaクラスの例、

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

このクラスには、人の名前と生年月日を表す2つのフィールドがあります。これらのフィールドには@ SerializedName注釈が付けられています。この注釈のパラメーター(値)は、serialisingおよびdeserialisingオブジェクトのときに使用される名前です。たとえば、JavaフィールドpersonNameはJSONではnameとして表されます。

JSONの例、

{
    "name":"chintan",
    "bd":"01-01-1990"
}
222
Chintan Rathod

ここにはすでにいくつかの答えがありますが、ProGuardを使用してコードを難読化し、モデルクラスで@SerializedName("name")を使用しない場合、GSONは機能しません。難読化により、変数名がString nameからString aに変更され、GSONがキーaをjsonで検索するため、GSON解析が破損する可能性があるため、失敗します。

@SerializedNameを指定すると、GSONは変数名に基づいてjsonを検索せず、指定された@SerializedNameのみを使用します。

もちろん、モデルを難読化しないようにproguardに指示できますが、モデルを難読化する場合は、@SerializedNameを指定する必要があります

46
Sandip Soni

クラスの上に@Keepを指定することにより、データクラスを難読化しないようにProguardに指示できます。これにより、クラスの削除も難読化も行われません。フィールド名が使用されているJsonキーに類似している場合、@ SerializedNameを各フィールドに明示的に追加する必要はありません。

1
Alankar Gupta