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


110

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

いくつかの例を挙げてください。利用の主な目的がわかりません。


javadocは何と言っていますか?
Sotirios Delimanolis 2015年

私は何を言っているのか理解できませんか?
ムハンマドアリ

jsonデータからこのプロパティが属するプロパティ識別子を識別します
Amrut Bidri

1
この素晴らしい説明をご覧くださいfuturestud.io/tutorials/…–
Abhishek Kumar

回答:


254

Javaクラスの例

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

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

JSONの例、

{
    "name":"chintan",
    "bd":"01-01-1990"
}

2
@MuhammadAliよろしくお願いします。また、upvoteで私に信用を与えると私の愛する:)に答える受け入れることができます
Chintan Rathod

3
反対票を投じた人は、コメントを追加して、反対票の目的が何であるかを理解し、
後で

4
正解....要点....の例Jsonは役に立ちました
Devrath

それが助けてくれてうれしい。:)
Chintan Rathod 2017

1
本当に役に立ちました!; どうもありがとう:) @ChintanRathod
Imran

64

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

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

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


1
Gr8の情報です。以前は、モデルを難読化しないようにproguardに指示していました。今、これで私はできる。:)
akashPatra 2018

1
これは非常に重要です。2時間を失い、どこにでも@SerializedNameを追加しました。
Abhijit Kurane

2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.