java - @expose retrofit
GSON: @Expose vs @SerializedName (4)
Con respecto a GSON, ¿cuál es la diferencia entre @Expose
y @SerializedName("stringValue")?
Además, @Expose
incluye dos indicadores booleanos : deserialize
y serialize
, para permitir que se salte el campo en una fase.
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