Какова основная цель @SerializedName
аннотации в Android с помощью Gson?
Приведите несколько разных примеров. Я не могу понять основную цель его использования.
Какова основная цель @SerializedName
аннотации в Android с помощью Gson?
Приведите несколько разных примеров. Я не могу понять основную цель его использования.
Ответы:
Пример класса 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"
}
Json
Здесь уже есть несколько ответов, но я хотел бы добавить, что если вы используете ProGuard
для обфускации своего кода и не используете его @SerializedName("name")
в своем классе модели, то ваш GSON не будет работать. Потому что из-за обфускации имена ваших переменных могли измениться с String name
на, что String a
привело к нарушению синтаксического анализа GSON, поскольку GSON будет искать ключ a
в json и не удастся.
При указании @SerializedName
GSON не будет искать в json на основе имени переменной и будет просто использовать указанное @SerializedName
.
Конечно, вы можете сказать proguard, чтобы он не запутывал вашу модель, но если вы хотите, чтобы модель запутывалась, вы должны указать @SerializedName
Вы можете указать Proguard, чтобы он не запутывал ваши классы данных, указав @Keep поверх класса. Это не удалит и не запутает ваш класс. Нет необходимости явно добавлять @SerializedName в каждое поле, если имя поля похоже на используемый для него ключ Json.