Яка основна мета анотації @SerializedName в Android за допомогою Gson


110

Яка основна мета @SerializedNameанотації в Android за допомогою Gson?

Наведіть мені кілька різних прикладів. Я не можу зрозуміти головну мету його використання.


Що говорить явадок?
Сотіріос Деліманоліс

я не можу зрозуміти, що кажуть?
Мухаммед Алі

він визначить показник властивості, до якого належить цей ресурс, з даних json
Amrut Bidri

1
Ви можете побачити це дивовижне пояснення futurestud.io/tutorials/…
Абхішек Кумар

Відповіді:


254

Приклад класу 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"
}

2
@MuhammadAli із задоволенням допомагаю тобі. Ви можете також дати мені кредит, звернувшись і прийняти відповідь, моя дорога :)
Чінтан Ратод

3
Негативні виборці, будь ласка, додайте свій коментар, щоб я зрозумів, яка мета відмови від голосування, і я можу вдосконалити свою відповідь далі .. :)
Chintan Rathod

4
Хороша відповідь .... Праворуч до справи .... Приклад з Jsonкорисним
Devrath

Радий, що це допомогло. :)
Чінтан Ратод

1
Дуже корисно !! ; Дякую тобі :) @ChintanRathod
Імран

64

Тут вже мало відповідей, але я хотів би додати, що якщо ви використовуєте ProGuardдля Obfuscate свого коду та не використовуєте @SerializedName("name")у своєму модельному класі, то ваш GSON не працюватиме. Оскільки через обфускування, ваші імена змінних можуть бути змінені з String nameна String aрезультат у порушеному синтаксичному розборі GSON, оскільки GSON шукатиме ключ aу json, і він вийде з ладу.

Вказавши @SerializedName, GSON не буде шукати в 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.