Saltar al contenido

Gson: @Expose vs @SerializedName

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"}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *