it-swarm.com.ru

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

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

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

87
Muhammad Ali

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

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

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

Пример JSON,

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

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

Указав @SerializedName, GSON не будет искать json на основе имени переменной и будет просто использовать указанный @SerializedName.

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

45
Sandip Soni

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

0
Alankar Gupta