Какова основная цель аннотации @SerializedName в Android с использованием Gson

111

Какова основная цель @SerializedNameаннотации в Android с помощью Gson?

Приведите несколько разных примеров. Я не могу понять основную цель его использования.

Мухаммед Али
источник
Что говорит javadoc?
Сотириос Делиманолис
я не могу понять что говорят?
Мухаммед Али
он определит идентификатор свойства, которому принадлежит это свойство, из данных json
Амрут Бидри,
1
Вы можете увидеть это потрясающее объяснение futurestud.io/tutorials/…
Абхишек Кумар

Ответы:

255

Пример класса Java,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

Этот класс имеет два поля, которые представляют имя человека и дату рождения человека. Эти поля помечаются аннотацией @SerializedName . Параметр (значение) этой аннотации - это имя, которое будет использоваться, когда serialisingи deserialisingобъекты. Например, поле Java personName представлено как имя в JSON.

Пример JSON,

{
    "name":"chintan",
    "bd":"01-01-1990"
}
Чинтан Ратод
источник
2
@MuhammadAli, я рад помочь вам. Вы также можете отдать мне должное, проголосовав за, и принять ответ, моя дорогая :)
Чинтан Ратод,
3
Голосующие против
4
Хороший ответ .... Прямо к Json
делу
Рад, что это помогло. :)
Чинтан Ратод
1
Действительно полезно !! ; Большое вам спасибо :) @ChintanRathod
Имран
65

Здесь уже есть несколько ответов, но я хотел бы добавить, что если вы используете ProGuardдля обфускации своего кода и не используете его @SerializedName("name")в своем классе модели, то ваш GSON не будет работать. Потому что из-за обфускации имена ваших переменных могли измениться с String nameна, что String aпривело к нарушению синтаксического анализа GSON, поскольку GSON будет искать ключ aв json и не удастся.

При указании @SerializedNameGSON не будет искать в json на основе имени переменной и будет просто использовать указанное @SerializedName.

Конечно, вы можете сказать proguard, чтобы он не запутывал вашу модель, но если вы хотите, чтобы модель запутывалась, вы должны указать @SerializedName

Сандип Фичадия
источник
1
Gr8 info, я говорил proguard не запутывать модели. Теперь с этим я справлюсь. :)
akashPatra
1
Это очень важно. Потеряли 2 часа и везде добавляли @SerializedName.
Абхиджит Куране,
2

Вы можете указать Proguard, чтобы он не запутывал ваши классы данных, указав @Keep поверх класса. Это не удалит и не запутает ваш класс. Нет необходимости явно добавлять @SerializedName в каждое поле, если имя поля похоже на используемый для него ключ Json.

Аланкар Гупта
источник