@Documented @Retention(value=RUNTIME) @Target(value=FIELD) public @interface Expose
This annotation has no effect unless you build
Gson
with a
GsonBuilder
and invoke
GsonBuilder.excludeFieldsWithoutExposeAnnotation()
method.
Here is an example of how this annotation is meant to be used:
public class User { @Expose private String firstName; @Expose(serialize = false) private String lastName; @Expose (serialize = false, deserialize = false) private String emailAddress; private String password; }If you created Gson with
new Gson()
, the toJson()
and
fromJson()
methods will use the password
field along-with
firstName
, lastName
, and emailAddress
for
serialization and deserialization. However, if you created Gson with
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
then the toJson()
and fromJson()
methods of Gson will exclude
the password
field. This is because the password
field is not
marked with the @Expose
annotation. Gson will also exclude
lastName
and emailAddress
from serialization since
serialize
is set to false
. Similarly, Gson will exclude
emailAddress
from deserialization since deserialize
is set to
false.
Note that another way to achieve the same effect would have been to just mark
the password
field as transient
, and Gson would have excluded
it even with default settings. 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.
Modifier and Type | Optional Element and Description |
---|---|
boolean |
deserialize
If
true , the field marked with this annotation is deserialized from
the JSON. |
boolean |
serialize
If
true , the field marked with this annotation is written out in the
JSON while serializing. |