SerializedName
Date: 2016-11-03

com.google.gson.annotations

## Annotation Type SerializedName

-     @Documented
      @Retention(value=RUNTIME)
      @Target(value={FIELD,METHOD})
      public @interface SerializedName

  An annotation that indicates this member should be serialized to JSON with the provided name value as its field name.

  This annotation will override any `FieldNamingPolicy`, including the default field naming policy, that may have been set on the `Gson` instance. A different naming policy can set using the `GsonBuilder` class. See `GsonBuilder.setFieldNamingPolicy(com.google.gson.FieldNamingPolicy)` for more information.

  Here is an example of how this annotation is meant to be used:

       public class MyClass {
         @SerializedName("name") String a;
         @SerializedName(value="name1", alternate={"name2", "name3"}) String b;
         String c;

         public MyClass(String a, String b, String c) {
           this.a = a;
           this.b = b;
           this.c = c;
         }
       }

  The following shows the output that is generated when serializing an instance of the above example class:

       MyClass target = new MyClass("v1", "v2", "v3");
       Gson gson = new Gson();
       String json = gson.toJson(target);
       System.out.println(json);

       ===== OUTPUT =====
       {"name":"v1","name1":"v2","c":"v3"}

  NOTE: The value you specify in this annotation must be a valid JSON field name.

  While deserializing, all values specified in the annotation will be deserialized into the field. For example:

         MyClass target = gson.fromJson("{'name1':'v1'}", MyClass.class);
         assertEquals("v1", target.b);
         target = gson.fromJson("{'name2':'v2'}", MyClass.class);
         assertEquals("v2", target.b);
         target = gson.fromJson("{'name3':'v3'}", MyClass.class);
         assertEquals("v3", target.b);

  Note that MyClass.b is now deserialized from either name1, name2 or name3.
  See Also:
    `FieldNamingPolicy`

- - ### Required Element Summary

    Required Elements
    Modifier and Type | Required Element and Description
    --- | ---
    `java.lang.String` | `value`

  - ### Optional Element Summary

    Optional Elements
    Modifier and Type | Optional Element and Description
    --- | ---
    `java.lang.String[]` | `alternate`

- - ### Element Detail

    - #### value

          public abstract java.lang.String value

      Returns:
        the desired name of the field when it is serialized or deserialized

    - #### alternate

          public abstract java.lang.String[] alternate

      Returns:
        the alternative names of the field when it is deserialized
      Default:
        {}