Expose
Date: 2016-11-03

com.google.gson.annotations

## Annotation Type Expose

-     @Documented
      @Retention(value=RUNTIME)
      @Target(value=FIELD)
      public @interface Expose

  An annotation that indicates this member should be exposed for JSON serialization or deserialization.

  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.

- - ### Optional Element Summary

    Optional Elements
    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.

- - ### Element Detail

    - #### serialize

          public abstract boolean serialize

      If `true`, the field marked with this annotation is written out in the JSON while serializing. If `false`, the field marked with this annotation is skipped from the serialized output. Defaults to `true`.
      Since:
        1.4
      Default:
        true

    - #### deserialize

          public abstract boolean deserialize

      If `true`, the field marked with this annotation is deserialized from the JSON. If `false`, the field marked with this annotation is skipped during deserialization. Defaults to `true`.
      Since:
        1.4
      Default:
        true