expose java android json gson android-gson

java - @expose retrofit



GSON: @Expose vs @SerializedName (4)

Con respecto a GSON, ¿cuál es la diferencia entre @Expose y @SerializedName("stringValue")?



Incluso si es tarde quiero responder a esta pregunta. Para explicarlo debemos saber qué es la serialization y la deserialization . serialization es convertir el object en una json string y la deserialization es convertir la json string en un object .

Digamos que hemos clase de User sin anotaciones.

public class User{ private String userName; private Integer userAge; public User(String name, Integer age){ userName = name; userAge = age; } }

Y serialize este object como abajo

User user = new User("Ahmed", 30); Gson gson = new Gson(); String jsonString = gson.toJson(user);

Cadena Json será así

{ "userName":"Ahmed", "userAge":30 }

Si agregamos la anotación @SerializedName

public class User{ @SerializedName("name") private String userName; @SerializedName("age") private Integer userAge; public User(String name, Integer age){ userName = name; userAge = age; } }

Cadena Json será así

{ "name":"Ahmed", "age":30 }

@Expose se utiliza para permitir o rechazar la serialization y la deserialization . @Expose es opcional y tiene dos parámetros de configuración: serialize y deserialize . Por defecto están configurados en verdadero. Para serialize y deserialize con @Expose creamos un objeto gson como este

Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

Debajo de userName no se deserializará. El valor de userName será null .

@SerializedName("name") @Expose(deserialize = false) private String userName;

Por debajo de userName no se serializará.

@SerializedName("name") @Expose(serialize = false) private String userName;

La cadena de Json será así. Sólo se deserializará userAge .

{ "age":30 }


class Person{ String name; String password; }

Supongamos que si pongo la anotación Exponer encima de un nombre de variable o contraseña sin SerializedName , se serializará como nombre de variable AS

Pero si ponemos SerializedName como (" nombre de usuario ") o (" contraseña "), se serializarán con esa clave

si serializado

{"username":"trinadh","password":"hello"}

si no

{"name":"trinadh","password":"hello"}


@Expose String myString; // will be serialized as myString @SerializedName("m_s") String myString; // will be serialized as m_s