Jaki jest podstawowy cel @SerializedName
adnotacji w systemie Android za pomocą Gson?
Podaj mi kilka przykładów. Nie mogę zrozumieć głównego celu korzystania z niego.
Jaki jest podstawowy cel @SerializedName
adnotacji w systemie Android za pomocą Gson?
Podaj mi kilka przykładów. Nie mogę zrozumieć głównego celu korzystania z niego.
Odpowiedzi:
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 serialising
i deserialising
obiektó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"
}
Json
Tutaj jest już kilka odpowiedzi, ale chciałbym dodać, że jeśli używasz ProGuard
do 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 name
na, String a
co spowodowało zepsute parsowanie GSON, ponieważ GSON będzie szukał klucza a
w 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
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.