Яка основна мета @SerializedName
анотації в Android за допомогою Gson?
Наведіть мені кілька різних прикладів. Я не можу зрозуміти головну мету його використання.
Яка основна мета @SerializedName
анотації в Android за допомогою Gson?
Наведіть мені кілька різних прикладів. Я не можу зрозуміти головну мету його використання.
Відповіді:
Приклад класу Java,
public class Person {
@SerializedName("name")
private String personName;
@SerializedName("bd")
private String birthDate;
}
У цьому класі є два поля, які представляють ім’я та дату народження людини. Ці поля позначаються анотацією @SerializedName . Параметр (значення) цієї анотації - це ім'я, яке слід використовувати, коли serialising
та deserialising
об'єкти. Наприклад, поле JavaName personName представлено як ім'я в JSON.
Приклад JSON,
{
"name":"chintan",
"bd":"01-01-1990"
}
Json
корисним
Тут вже мало відповідей, але я хотів би додати, що якщо ви використовуєте ProGuard
для Obfuscate свого коду та не використовуєте @SerializedName("name")
у своєму модельному класі, то ваш GSON не працюватиме. Оскільки через обфускування, ваші імена змінних можуть бути змінені з String name
на String a
результат у порушеному синтаксичному розборі GSON, оскільки GSON шукатиме ключ a
у json, і він вийде з ладу.
Вказавши @SerializedName
, GSON не буде шукати в json на основі назви змінної і просто використовуватиме вказане @SerializedName
.
Звичайно, ви можете сказати proguard, щоб не притуплювати вашу модель, але якщо ви хочете, щоб модель була прихованою, тоді вам потрібно вказати @SerializedName
Ви можете доручити Proguard не приховувати класи даних, вказавши @Keep вгорі класу. Це не призведе ні до видалення, ні до придушення вашого класу. Не потрібно додавати @SerializedName до кожного поля явно, якщо ім'я поля схоже на ключ Json, який використовується для нього.