Quel est le but de base de l' @SerializedName
annotation dans Android avec Gson?
Donnez-moi quelques exemples différents. Je ne comprends pas l'objectif principal de son utilisation.
Quel est le but de base de l' @SerializedName
annotation dans Android avec Gson?
Donnez-moi quelques exemples différents. Je ne comprends pas l'objectif principal de son utilisation.
Réponses:
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 serialising
et deserialising
objets. Par exemple, le champ Java personName est représenté sous forme de nom dans JSON.
Exemple JSON,
{
"name":"chintan",
"bd":"01-01-1990"
}
Json
était utile
Il y a déjà quelques réponses ici, mais j'aimerais ajouter que si vous utilisez ProGuard
pour 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 a
ce qui entraîne une analyse GSON cassée car GSON recherchera la clé a
dans 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
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.