Quel est l'objectif de base de l'annotation @SerializedName dans Android à l'aide de Gson

110

Quel est le but de base de l' @SerializedNameannotation dans Android avec Gson?

Donnez-moi quelques exemples différents. Je ne comprends pas l'objectif principal de son utilisation.

Muhammad Ali
la source
Que dit le javadoc?
Sotirios Delimanolis
je ne comprends pas ce que l'on dit?
Muhammad Ali
il identifiera l'identifiant de propriété auquel appartient cette propriété à partir des données json
Amrut Bidri
1
Vous pouvez voir cette explication géniale futurestud.io/tutorials
Abhishek Kumar

Réponses:

254

Exemple de classe Java,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

Cette classe comporte deux champs qui représentent le nom de la personne et la date de naissance d'une personne. Ces champs sont annotés avec l' annotation @SerializedName . Le paramètre (valeur) de cette annotation est le nom à utiliser lorsque serialisinget deserialisingobjets. Par exemple, le champ Java personName est représenté sous forme de nom dans JSON.

Exemple JSON,

{
    "name":"chintan",
    "bd":"01-01-1990"
}
Chintan Rathod
la source
2
@MuhammadAli c'est mon plaisir de vous aider. Vous pouvez également me donner crédit par vote positif et accepter la réponse mon cher :)
Chintan Rathod
3
Électeurs négatifs, veuillez ajouter votre commentaire afin que je puisse comprendre le but du vote négatif et que je puisse améliorer ma réponse à partir de là .. :)
Chintan Rathod
4
Bonne réponse ... Droit au but ... Exemple avec Jsonétait utile
Devrath
Heureux que cela ait aidé. :)
Chintan Rathod
1
Très utile!! ; Merci beaucoup :) @ChintanRathod
Imran
64

Il y a déjà quelques réponses ici, mais j'aimerais ajouter que si vous utilisez ProGuardpour masquer votre code et ne l'utilisez pas @SerializedName("name")dans votre classe de modèle, votre GSON ne fonctionnera pas. Parce qu'en raison de l'obfuscation, vos noms de variables peuvent avoir changé de String nameà, String ace qui entraîne une analyse GSON cassée car GSON recherchera la clé adans json et cela échouera.

En spécifiant @SerializedName, GSON ne recherchera pas dans json en fonction du nom de la variable et utilisera simplement spécifié @SerializedName.

Bien sûr, vous pouvez dire à proguard de ne pas obscurcir votre modèle, mais si vous souhaitez que le modèle soit obscurci, vous devez spécifier @SerializedName

Sandip Fichadiya
la source
1
Gr8 info, j'avais l'habitude de dire à proguard de ne pas masquer les modèles. Maintenant, avec cela, je peux le faire. :)
akashPatra
1
C'est très très important. J'ai perdu 2 heures et j'ai ajouté @SerializedName partout.
Abhijit Kurane
2

Vous pouvez demander à Proguard de ne pas masquer vos classes de données en spécifiant @Keep en haut de la classe. Cela ne supprimera ni n'obscurcira votre classe. Pas besoin d'ajouter @SerializedName à chaque champ explicitement si le nom du champ est similaire à la clé Json utilisée pour lui.

Alankar Gupta
la source