¿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.


¿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"
}

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.