Solución:
Incluso si es tarde, quería responder a esta pregunta. Para explicarlo debemos saber qué es serialization
y deserialization
.
serialization
está convirtiendo object
dentro json string
y deserialization
está convirtiendo json string
dentro object
.
Digamos que tenemos User
clase sin anotaciones.
public class User{
private String userName;
private Integer userAge;
public User(String name, Integer age){
userName = name;
userAge = age;
}
}
Y nosotros serialize
esta object
como a continuación
User user = new User("Ahmed", 30);
Gson gson = new Gson();
String jsonString = gson.toJson(user);
Json string será así
{
"userName":"Ahmed",
"userAge":30
}
Si agregamos 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;
}
}
Json string será así
{
"name":"Ahmed",
"age":30
}
@Expose
se utiliza para permitir o rechazar serialization
y deserialization
.
@Expose
es opcional y tiene dos parámetros de configuración: serialize
y deserialize
. De forma predeterminada, están configurados como verdaderos. Para serialize
y deserialize
con @Expose
creamos un objeto gson como este
Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Debajo userName
no se deserializará. El valor de userName será null
.
@SerializedName("name")
@Expose(deserialize = false)
private String userName;
Debajo userName
no se serializará.
@SerializedName("name")
@Expose(serialize = false)
private String userName;
La cadena Json será así. Solamente userAge
será deserializado.
{
"age":30
}
@SerializeName
se usa para establecer la clave que incluirá el objeto json, sin embargo @Expose
se utiliza para decidir si la variable se expondrá para serialización y deserialización, o no. Aquí está la documentación de @Expose
.
class Person{
String name;
String password;
}
supongo que si pongo una anotación Exponer encima de un nombre de variable o contraseña sin SerializedName, se serializará como nombre de variable
Pero si ponemos SerializedName igual que (“nombre de usuario“) o (“contraseña“), se serializarán con esa clave
si está serializado
{"username":"trinadh","password":"hello"}
que no
{"name":"trinadh","password":"hello"}