web-dev-qa-db-fra.com

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

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

Donnez-moi des exemples différents. Je ne peux pas comprendre le but principal de l'utiliser.

91
Muhammad Ali

Exemple de classe Java,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

Cette classe a 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 serialising et deserialising objets. Par exemple, le champ Java) personName est représenté par name en JSON.

Exemple JSON,

{
    "name":"chintan",
    "bd":"01-01-1990"
}
222
Chintan Rathod

Il y a déjà peu de réponses ici, mais je voudrais ajouter que si vous utilisez ProGuard pour dissimuler votre code et n'utilisez pas @SerializedName("name") dans votre classe de modèle, votre GSON a gagné ' t fonctionne. En raison de l'obscurcissement, les noms de vos variables pourraient avoir changé de String name À String a, Entraînant ainsi une analyse GSON cassée, car GSON recherchera la clé a dans json et échouera.

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

Bien sûr, vous pouvez indiquer à proguard de ne pas masquer votre modèle, mais si vous souhaitez que le modèle soit masqué, vous devez spécifier @SerializedName.

46
Sandip Soni

Vous pouvez indiquer à Proguard de ne pas masquer vos classes de données en spécifiant @Keep au-dessus de la classe. Cela ne supprimera ni n'obscurcira votre classe. Il n'est pas nécessaire d'ajouter @SerializedName à chaque champ explicitement si le nom du champ est similaire à la clé Json utilisée pour cela.

1
Alankar Gupta