With respect to Gson what is the difference between @Expose
and @SerializedName("stringValue")
?
The @Expose annotation is useful in a style of programming where you want to explicitly specify all fields that should get considered for serialization or deserialization.
This class has two fields that represent the person name and birth date of a person. These fields are annotated with the @SerializedName annotation. The parameter (value) of this annotation is the name to be used when serialising and deserialising objects.
Even if it's late I wanted to answer this question. To explain it we must know what is serialization
and deserialization
. serialization
is converting object
into json string
and deserialization
is converting json string
into object
.
Let's say we've User
class with no annotations.
public class User{ private String userName; private Integer userAge; public User(String name, Integer age){ userName = name; userAge = age; } }
And we serialize
this object
as below
User user = new User("Ahmed", 30); Gson gson = new Gson(); String jsonString = gson.toJson(user);
Json string will be like this
{ "userName":"Ahmed", "userAge":30 }
If we add annotation @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 will be like this
{ "name":"Ahmed", "age":30 }
@Expose
is used to allow or disallow serialization
and deserialization
. @Expose
is optional and it has two configuration parameters: serialize
and deserialize
. By default they're set to true. To serialize
and deserialize
with @Expose
we create gson object like this
Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Below userName
won't be deserialized. userName's value will be null
.
@SerializedName("name") @Expose(deserialize = false) private String userName;
Below userName
won't be serialized.
@SerializedName("name") @Expose(serialize = false) private String userName;
Json string will be like this. Only userAge
will be deserialized.
{ "age":30 }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With