Ahmed Faisal
Con respecto a Gson cual es la diferencia entre @Expose
y @SerializedName("stringValue")
?
Bek
Aunque sea tarde, quería responder a esta pregunta. Para explicarlo debemos saber qué es serialization
y deserialization
.
serialization
se está convirtiendo object
dentro json string
y deserialization
se está convirtiendo json string
dentro object
.
digamos que hemos 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
este object
como a continuación
User user = new User("Ahmed", 30);
Gson gson = new Gson();
String jsonString = gson.toJson(user);
La cadena Json será así
{
"userName":"Ahmed",
"userAge":30
}
Si añadimos 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;
}
}
La cadena Json será así
{
"name":"Ahmed",
"age":30
}
@Expose
se usa para permitir o no permitir 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. A serialize
y deserialize
con @Expose
creamos un objeto gson como este
Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Abajo userName
no será deserializado. el valor de nombre de usuario será null
.
@SerializedName("name")
@Expose(deserialize = false)
private String userName;
Abajo userName
no será serializado.
@SerializedName("name")
@Expose(serialize = false)
private String userName;
La cadena Json será así. Solamente userAge
será deserializado.
{
"age":30
}
-
@Kwnstantinos ¡Feliz de ayudarte!
– Bek
13 de junio de 2019 a las 4:16
-
Gracias. Cuando establecemos la serialización en falso, después de la serialización no veremos el nombre de usuario en la cadena json. Pero un momento. Supongamos que establecemos la deserialización del nombre de usuario en falso. Entonces, cuando deserialicemos nuestro json, obtendremos un nombre de usuario nulo. ¿Tengo razón?
– Hayk Mkrtchyan
1 oct 2019 a las 12:34
-
@Bek: Hermosa explicación
– padreazrael
7 de enero de 2020 a las 9:09
-
El valor predeterminado será verdadero si no especificamos ningún valor en la anotación Expose.
–Chetan Gaikwad
31 de enero a las 16:50
Gavriel
@SerializeName
se usa para establecer la clave que incluirá el objeto json, sin embargo @Expose
se utiliza para decidir si la variable será expuesta para serialización y deserialización o no. Aquí está la documentación de @Expose
.
-
¿Y si tuviéramos los dos?
Expose
ySerializeName
?– Hamzeh Soboh
10 de julio de 2018 a las 6:05
-
Expose
está usando en casos raros y se puede quitar-Ali Rezaiyan
26 de mayo de 2020 a las 7:46
-
@HamzehSoboh entonces dependerá de los valores pasados en
@Expose
. (su sintaxis completa es@Expose(serialize = <true/false>,deserialize = <true/false>)
donde true es el valor predeterminado para ambos.– ansh sachdeva
26 de julio de 2020 a las 7:55
class Person{
String name;
String password;
}
supongo que si pongo una anotación Exponer encima de un nombre de variable o contraseña sin SerializedNamese serializará como nombre de variable
Pero si ponemos SerializedName me gusta (“nombre de usuario“) o (“clave“), se serializarán con esa clave
si serializado
{"username":"trinadh","password":"hello"}
que no
{"name":"trinadh","password":"hello"}
Shubham
Es más, @Expose
viene con dos banderas booleanas: deserialize
y serialize
para permitir saltarse el campo durante una fase.
@MarkKeen, oye amigo, el enlace está roto.
– iCantC
26 de febrero de 2020 a las 10:52
enlace actualizado (otra búsqueda en Google) websystique.com/java/json/gson-json-anotaciones-ejemplo
– Marca
26 de febrero de 2020 a las 12:59
El valor predeterminado será verdadero si no especificamos ningún valor en la anotación Expose.
–Chetan Gaikwad
31 de enero a las 16:51