¿Cuál es el propósito básico de la anotación @SerializedName en Android usando Gson?

110

¿Cuál es el propósito básico de la @SerializedNameanotación en Android usando Gson?

Dame algunos ejemplos diferentes. No puedo entender el propósito principal de usarlo.

Muhammad Ali
fuente
¿Qué dice el javadoc?
Sotirios Delimanolis
No puedo entender lo que dicen
Muhammad Ali
identificará el identificador de propiedad al que pertenece esta propiedad a partir de los datos json
Amrut Bidri
1
Puedes ver esta increíble explicación futurestud.io/tutorials/…
Abhishek Kumar

Respuestas:

254

Ejemplo de clase Java,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

Esta clase tiene dos campos que representan el nombre de la persona y la fecha de nacimiento de una persona. Estos campos están anotados con la anotación @SerializedName . El parámetro (valor) de esta anotación es el nombre que se utilizará cuando serialisingy deserialisingobjetos. Por ejemplo, el campo de Java personName se representa como nombre en JSON.

Ejemplo JSON,

{
    "name":"chintan",
    "bd":"01-01-1990"
}
Chintan Rathod
fuente
2
@MuhammadAli, es un placer poder ayudarte. También puede darme crédito por voto a favor y aceptar la respuesta querida :)
Chintan Rathod
3
Votantes negativos, agreguen su comentario para que pueda entender cuál es el propósito de votar en contra y puedo mejorar mi respuesta en adelante .. :)
Chintan Rathod
4
Buena respuesta ... Json
Directo
Me alegro de que haya ayudado. :)
Chintan Rathod
1
¡¡De mucha ayuda!! ; Muchas gracias :) @ChintanRathod
Imran
64

Ya hay algunas respuestas aquí, pero me gustaría agregar que si está usando ProGuardpara Ofuscar su código y no lo usa @SerializedName("name")en su clase modelo, entonces su GSON no funcionará. Debido a la ofuscación, es posible que los nombres de sus variables hayan cambiado de String namea String aresultando en un análisis GSON roto ya que GSON buscará la clave aen json y fallará.

Al especificar @SerializedName, GSON no buscará en json según el nombre de la variable y solo usará el especificado @SerializedName.

Por supuesto, puede decirle a proguard que no ofusque su modelo, pero si desea que se ofusque el modelo, debe especificar @SerializedName

Sandip Fichadiya
fuente
1
Gr8 info, solía decirle a proguard que no ofuscara los modelos. Ahora, con esto puedo hacerlo. :)
akashPatra
1
Esto es muy, muy importante. Perdí 2 horas y agregué @SerializedName en todas partes.
Abhijit Kurane
2

Puede indicarle a Proguard que no ofusque sus clases de datos especificando @Keep en la parte superior de la clase. Esto no eliminará ni ofuscará su clase. No es necesario agregar @SerializedName a todos y cada uno de los campos explícitamente si el nombre del campo es similar a la clave Json que se usa para él.

Alankar Gupta
fuente