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.


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"
}

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.