Qual è lo scopo di base dell'annotazione @SerializedName in Android utilizzando Gson


110

Qual è lo scopo di base @SerializedNamedell'annotazione in Android utilizzando Gson?

Dammi alcuni esempi diversi. Non riesco a capire lo scopo principale dell'utilizzo.


Cosa dice il javadoc?
Sotirios Delimanolis

non riesco a capire cosa si dice?
Muhammad Ali

identificherà l'identificatore della proprietà a cui appartiene questa proprietà dai dati json
Amrut Bidri

1
Puoi vedere questa fantastica spiegazione futurestud.io/tutorials/…
Abhishek Kumar

Risposte:


254

Esempio di classe Java,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

Questa classe ha due campi che rappresentano il nome della persona e la data di nascita di una persona. Questi campi sono annotati con l' annotazione @SerializedName . Il parametro (valore) di questa annotazione è il nome da utilizzare quando serialisinge gli deserialisingoggetti. Ad esempio, il campo Java personName è rappresentato come nome in JSON.

Esempio JSON,

{
    "name":"chintan",
    "bd":"01-01-1990"
}

2
@ MuhammadAli è un piacere aiutarti. Puoi anche darmi credito per
voto positivo

3
Elettori negativi, aggiungete il vostro commento in modo che io possa capire qual è lo scopo del voto negativo e posso migliorare la mia risposta in avanti .. :)
Chintan Rathod

4
Buona risposta .... Giusto al punto .... Esempio con è Jsonstato utile
Devrath

Sono contento che abbia aiutato. :)
Chintan Rathod

1
Davvero utile !! ; Grazie mille :) @ChintanRathod
Imran

64

Ci sono già poche risposte qui, ma vorrei aggiungere che se stai usando ProGuardper offuscare il tuo codice e non lo usi @SerializedName("name")nella tua classe modello, allora il tuo GSON non funzionerà. Perché a causa dell'offuscamento, i nomi delle variabili potrebbero essere cambiati da String namea String arisultando in un'analisi GSON non funzionante poiché GSON cercherà la chiavea in json e fallirà.

Specificando @SerializedName, GSON non cercherà in json in base al nome della variabile e utilizzerà solo specificato @SerializedName.

Ovviamente puoi dire a proguard di non offuscare il tuo modello, ma se desideri che il modello sia offuscato, devi specificare @SerializedName


1
Gr8 info, dicevo a proguard di non offuscare i modelli. Ora, con questo posso farlo. :)
akashPatra

1
Questo è molto, molto importante. Ho perso 2 ore e ho aggiunto @SerializedName ovunque.
Abhijit Kurane

2

Puoi indicare a Proguard di non offuscare le tue classi di dati specificando @Keep all'inizio della classe. Questo non rimuoverà né offuscherà la tua classe. Non è necessario aggiungere @SerializedName a ogni campo in modo esplicito se il nome del campo è simile alla chiave Json utilizzata per esso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.