Какова основная цель аннотации @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, я рад помочь вам. Вы также можете отдать мне должное, проголосовав за, и принять ответ, моя дорогая :)
Чинтан Ратод,


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.