Jaki jest podstawowy cel adnotacji @SerializedName w systemie Android przy użyciu Gson

110

Jaki jest podstawowy cel @SerializedNameadnotacji w systemie Android za pomocą Gson?

Podaj mi kilka przykładów. Nie mogę zrozumieć głównego celu korzystania z niego.

Muhammad Ali
źródło
Co mówi javadoc?
Sotirios Delimanolis
nie rozumiem, co mówisz?
Muhammad Ali
zidentyfikuje identyfikator właściwości, do którego należy ta właściwość na podstawie danych json
Amrut Bidri
1
Możesz zobaczyć to niesamowite wyjaśnienie futurestud.io/tutorials/ ...
Abhishek Kumar

Odpowiedzi:

254

Przykład klasy Java,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

Ta klasa ma dwa pola, które reprezentują imię i nazwisko osoby oraz datę urodzenia osoby. Te pola są opatrzone adnotacją @SerializedName . Parametr (wartość) tej adnotacji to nazwa, która ma być używana podczas serialisingi deserialisingobiektów. Na przykład pole personName w języku Java jest reprezentowane jako nazwa w formacie JSON.

Przykład JSON,

{
    "name":"chintan",
    "bd":"01-01-1990"
}
Chintan Rathod
źródło
2
@MuhammadAli z przyjemnością Ci pomogę. Możesz również dać mi kredyt przez głosowanie i przyjąć odpowiedź moja droga :)
Chintan Rathod
3
Negatywne wyborcy, proszę dodać swój komentarz tak, że mogę zrozumieć, co jest celem dół głosowania i mogę poprawić moją odpowiedź r .. :)
Chintan Rathod
4
Dobra odpowiedź… od Json
razu do rzeczy
Cieszę się, że to pomogło. :)
Chintan Rathod
1
Naprawdę pomocny!! ; Dziękuję bardzo :) @ChintanRathod
Imran
65

Tutaj jest już kilka odpowiedzi, ale chciałbym dodać, że jeśli używasz ProGuarddo zaciemniania swojego kodu i nie używasz @SerializedName("name")w swojej klasie modelu, to twój GSON nie zadziała. Ponieważ z powodu zaciemnienia nazwy zmiennych mogły zmienić się z String namena, String aco spowodowało zepsute parsowanie GSON, ponieważ GSON będzie szukał klucza aw json i zakończy się niepowodzeniem.

Określając @SerializedName, GSON nie będzie wyglądał w json na podstawie nazwy zmiennej, a po prostu użyje określonego @SerializedName.

Oczywiście możesz powiedzieć programowi proguard, aby nie zaciemniał Twojego modelu, ale jeśli chcesz, aby model został zaciemniony, musisz określić @SerializedName

Sandip Fichadiya
źródło
1
Gr8 info, zwykłem mówić proguardowi, aby nie zaciemniał modeli. Teraz mogę to zrobić. :)
akashPatra
1
To jest bardzo ważne. Straciłem 2 godziny i wszędzie dodano @SerializedName.
Abhijit Kurane
2

Możesz poinstruować Proguard, aby nie zaciemniał twoich klas danych, określając @Keep nad klasą. To nie usunie ani nie zaciemni twojej klasy. Nie ma potrzeby jawnego dodawania @SerializedName do każdego pola, jeśli nazwa pola jest podobna do używanego do tego klucza Json.

Alankar Gupta
źródło