Was ist der Hauptzweck der Annotation von @SerializedName in Android mit Gson?

110

Was ist der Hauptzweck der @SerializedNameAnnotation in Android mit Gson?

Geben Sie mir verschiedene Beispiele. Ich kann den Hauptzweck der Verwendung nicht verstehen.

Muhammad Ali
quelle
Was sagt der Javadoc?
Sotirios Delimanolis
Ich kann nicht verstehen, was gesagt wird.
Muhammad Ali
Es wird den Eigenschaftsindentifikator, zu dem diese Eigenschaft gehört, aus den
JSON-
1
Sie können diese fantastische Erklärung
Abhishek Kumar

Antworten:

254

Java-Klassenbeispiel,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

Diese Klasse verfügt über zwei Felder, die den Namen der Person und das Geburtsdatum einer Person darstellen. Diese Felder werden mit der Annotation @SerializedName versehen . Der Parameter (Wert) dieser Anmerkung ist der Name, der verwendet werden soll, wenn serialisingund deserialisingObjekte. Beispielsweise wird das Java-Feld personName als Name dargestellt in JSON .

JSON-Beispiel,

{
    "name":"chintan",
    "bd":"01-01-1990"
}
Chintan Rathod
quelle
2
@ MuhammadAli Es ist mir eine Freude, Ihnen zu helfen. Sie können mir auch durch Upvote Kredit geben und Antwort annehmen, meine Liebe :)
Chintan Rathod
3
Negative Wähler, bitte fügen Sie Ihren Kommentar hinzu, damit ich verstehen kann, was der Zweck der Abstimmung ist, und meine Antwort weiter verbessern kann. :)
Chintan Rathod
4
Gute Antwort .... Auf den Punkt gebracht .... Beispiel mit Jsonwar hilfreich
Devrath
Schön, dass es geholfen hat. :)
Chintan Rathod
1
Wirklich hilfreich!! ;; Vielen Dank :) @ChintanRathod
Imran
64

Hier gibt es bereits wenige Antworten, aber ich möchte hinzufügen, dass Ihr GSON nicht funktioniert , wenn Sie ProGuardIhren Code @SerializedName("name")verschleiern und nicht in Ihrer Modellklasse verwenden. Aufgrund der Verschleierung haben sich Ihre Variablennamen möglicherweise von String namezu geändert , String awas zu einer fehlerhaften GSON-Analyse geführt hat, da GSON nach Schlüsseln suchta für json und dieser fehlschlägt.

Durch die Angabe @SerializedNamesucht GSON nicht in json basierend auf dem Variablennamen und verwendet nur angegeben @SerializedName.

Natürlich können Sie proguard anweisen, Ihr Modell nicht zu verschleiern. Wenn Sie jedoch möchten, dass das Modell verschleiert wird, müssen Sie dies angeben @SerializedName

Sandip Fichadiya
quelle
1
Gr8 Info, ich habe Proguard immer angewiesen, die Modelle nicht zu verschleiern. Damit kann ich jetzt tun. :)
akashPatra
1
Das ist sehr sehr wichtig. 2 Stunden verloren und @SerializedName überall hinzugefügt.
Abhijit Kurane
2

Sie können Proguard anweisen, Ihre Datenklassen nicht zu verschleiern, indem Sie @Keep über der Klasse angeben. Dadurch wird Ihre Klasse weder entfernt noch verschleiert. Es ist nicht erforderlich, jedem Feld explizit @SerializedName hinzuzufügen, wenn der Feldname dem dafür verwendeten Json-Schlüssel ähnelt.

Alankar Gupta
quelle