Top Description Inners Constructors Methods
com.google.gson

public abstract Class TypeAdapter<T>

extends Object
Class Inheritance
Known Direct Subclasses
com.google.gson.TypeAdapter.NullSafeTypeAdapter, com.google.gson.internal.bind.ArrayTypeAdapter, com.google.gson.internal.bind.CollectionTypeAdapterFactory.Adapter, com.google.gson.internal.bind.DefaultDateTypeAdapter, com.google.gson.internal.bind.EnumTypeAdapter, com.google.gson.internal.bind.JsonElementTypeAdapter, com.google.gson.internal.bind.MapTypeAdapterFactory.Adapter, com.google.gson.internal.bind.NumberTypeAdapter, com.google.gson.internal.bind.ObjectTypeAdapter, com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.Adapter, com.google.gson.internal.bind.SerializationDelegatingTypeAdapter, com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper, com.google.gson.internal.bind.TypeAdapters.FloatAdapter, com.google.gson.internal.bind.TypeAdapters.DoubleAdapter, com.google.gson.internal.bind.TypeAdapters.IntegerFieldsTypeAdapter, com.google.gson.internal.sql.SqlDateTypeAdapter, com.google.gson.internal.sql.SqlTimestampTypeAdapter, com.google.gson.internal.sql.SqlTimeTypeAdapter
Imports
com.google.gson.internal.Streams, com.google.gson.internal.bind.JsonTreeReader, .JsonTreeWriter, com.google.gson.stream.JsonReader, .JsonToken, .JsonWriter, java.io.IOException, .Reader, .StringReader, .Writer

Converts Java objects to and from JSON.

Defining a type's JSON form

By default Gson converts application classes to JSON using its built-in type adapters. If Gson's default JSON conversion isn't appropriate for a type, extend this class to customize the conversion. Here's an example of a type adapter for an (X,Y) coordinate point:
public class PointAdapter extends TypeAdapter<Point> {
  public Point read(JsonReader reader) throws IOException {
    if (reader.peek() == JsonToken.NULL) {
      reader.nextNull();
      return null;
    }
    String xy = reader.nextString();
    String[] parts = xy.split(",");
    int x = Integer.parseInt(parts[0]);
    int y = Integer.parseInt(parts[1]);
    return new Point(x, y);
  }
  public void write(JsonWriter writer, Point value) throws IOException {
    if (value == null) {
      writer.nullValue();
      return;
    }
    String xy = value.getX() + "," + value.getY();
    writer.value(xy);
  }
}
With this type adapter installed, Gson will convert Points to JSON as strings like "5,8" rather than objects like {"x":5,"y":8}. In this case the type adapter binds a rich Java class to a compact JSON value.

The read() method must read exactly one value and write() must write exactly one value. For primitive types this is means readers should make exactly one call to nextBoolean(), nextDouble(), nextInt(), nextLong(), nextString() or nextNull(). Writers should make exactly one call to one of value() or nullValue(). For arrays, type adapters should start with a call to beginArray(), convert all elements, and finish with a call to endArray(). For objects, they should start with beginObject(), convert the object, and finish with endObject(). Failing to convert a value or converting too many values may cause the application to crash.

Type adapters should be prepared to read null from the stream and write it to the stream. Alternatively, they should use nullSafe() method while registering the type adapter with Gson. If your Gson instance has been configured to GsonBuilder#serializeNulls(), these nulls will be written to the final document. Otherwise the value (and the corresponding name when writing to a JSON object) will be omitted automatically. In either case your type adapter must handle null.

Type adapters should be stateless and thread-safe, otherwise the thread-safety guarantees of Gson might not apply.

To use a custom type adapter with Gson, you must register it with a GsonBuilder:

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Point.class, new PointAdapter());
// if PointAdapter didn't check for nulls in its read/write methods, you should instead use
// builder.registerTypeAdapter(Point.class, new PointAdapter().nullSafe());
...
Gson gson = builder.create();
Since
2.1

Nested and Inner Type Summary

Modifier and TypeClass and Description
private class

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public final T

Returns:

the converted Java object. May be null.
fromJson
(Reader in)

Converts the JSON document in in to a Java object.

public final T

Returns:

the converted Java object. May be null.
fromJson
(String json)

Converts the JSON document in json to a Java object.

public final T

Returns:

the converted Java object. May be null.
fromJsonTree
(JsonElement
the JSON element to convert. May be JsonNull.
jsonTree
)

Converts jsonTree to a Java object.

public final TypeAdapter<T>
nullSafe()

This wrapper method is used to make a type adapter null tolerant.

public abstract T

Returns:

the converted Java object. May be null.
read
(JsonReader in)

Reads one JSON value (an array, object, string, number, boolean or null) and converts it to a Java object.

public final void
toJson(Writer out, T
the Java object to convert. May be null.
value
)

Converts value to a JSON document and writes it to out.

public final String
toJson(T
the Java object to convert. May be null.
value
)

Converts value to a JSON document.

public final JsonElement

Returns:

the converted JSON tree. May be JsonNull.
toJsonTree
(T
the Java object to convert. May be null.
value
)

Converts value to a JSON tree.

public abstract void
write(JsonWriter out, T
the Java object to write. May be null.
value
)

Writes one JSON value (an array, object, string, number, boolean or null) for value.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Constructor Detail

TypeAdapterback to summary
public TypeAdapter()

Method Detail

fromJsonback to summary
public final T fromJson(Reader in) throws IOException

Converts the JSON document in in to a Java object.

A JsonReader with default configuration (that is with Strictness#LEGACY_STRICT as strictness) is used for reading the JSON data. To customize this behavior, create a JsonReader, configure it and then use read(JsonReader) instead.

No exception is thrown if the JSON data has multiple top-level JSON elements, or if there is trailing data.

Returns:T

the converted Java object. May be null.

Since
2.2
fromJsonback to summary
public final T fromJson(String json) throws IOException

Converts the JSON document in json to a Java object.

A JsonReader with default configuration (that is with Strictness#LEGACY_STRICT as strictness) is used for reading the JSON data. To customize this behavior, create a JsonReader, configure it and then use read(JsonReader) instead.

No exception is thrown if the JSON data has multiple top-level JSON elements, or if there is trailing data.

Returns:T

the converted Java object. May be null.

Since
2.2
fromJsonTreeback to summary
public final T fromJsonTree(JsonElement jsonTree)

Converts jsonTree to a Java object.

Parameters
jsonTree:JsonElement

the JSON element to convert. May be JsonNull.

Returns:T

the converted Java object. May be null.

Exceptions
JsonIOException:
wrapping IOExceptions thrown by read(JsonReader)
Since
2.2
nullSafeback to summary
public final TypeAdapter<T> nullSafe()

This wrapper method is used to make a type adapter null tolerant. In general, a type adapter is required to handle nulls in write and read methods. Here is how this is typically done:

Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class,
  new TypeAdapter<Foo>() {
    public Foo read(JsonReader in) throws IOException {
      if (in.peek() == JsonToken.NULL) {
        in.nextNull();
        return null;
      }
      // read a Foo from in and return it
    }
    public void write(JsonWriter out, Foo src) throws IOException {
      if (src == null) {
        out.nullValue();
        return;
      }
      // write src as JSON to out
    }
  }).create();
You can avoid this boilerplate handling of nulls by wrapping your type adapter with this method. Here is how we will rewrite the above example:
Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class,
  new TypeAdapter<Foo>() {
    public Foo read(JsonReader in) throws IOException {
      // read a Foo from in and return it
    }
    public void write(JsonWriter out, Foo src) throws IOException {
      // write src as JSON to out
    }
  }.nullSafe()).create();
Note that we didn't need to check for nulls in our type adapter after we used nullSafe.
readback to summary
public abstract T read(JsonReader in) throws IOException

Reads one JSON value (an array, object, string, number, boolean or null) and converts it to a Java object. Returns the converted object.

Returns:T

the converted Java object. May be null.

toJsonback to summary
public final void toJson(Writer out, T value) throws IOException

Converts value to a JSON document and writes it to out.

A JsonWriter with default configuration is used for writing the JSON data. To customize this behavior, create a JsonWriter, configure it and then use write(JsonWriter, Object) instead.

Parameters
value:T

the Java object to convert. May be null.

Since
2.2
toJsonback to summary
public final String toJson(T value)

Converts value to a JSON document.

A JsonWriter with default configuration is used for writing the JSON data. To customize this behavior, create a JsonWriter, configure it and then use write(JsonWriter, Object) instead.

Parameters
value:T

the Java object to convert. May be null.

Exceptions
JsonIOException:
wrapping IOExceptions thrown by write(JsonWriter, Object)
Since
2.2
toJsonTreeback to summary
public final JsonElement toJsonTree(T value)

Converts value to a JSON tree.

Parameters
value:T

the Java object to convert. May be null.

Returns:JsonElement

the converted JSON tree. May be JsonNull.

Exceptions
JsonIOException:
wrapping IOExceptions thrown by write(JsonWriter, Object)
Since
2.2
writeback to summary
public abstract void write(JsonWriter out, T value) throws IOException

Writes one JSON value (an array, object, string, number, boolean or null) for value.

Parameters
value:T

the Java object to write. May be null.

com.google.gson back to summary

private final Class TypeAdapter.NullSafeTypeAdapter

extends TypeAdapter<T>
Class Inheritance

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public T
read(JsonReader reader)

Implements abstract com.google.gson.TypeAdapter.read.

Reads one JSON value (an array, object, string, number, boolean or null) and converts it to a Java object.

public String
toString()

Overrides java.lang.Object.toString.

Returns a string representation of the object.

public void
write(JsonWriter out, T value)

Implements abstract com.google.gson.TypeAdapter.write.

Writes one JSON value (an array, object, string, number, boolean or null) for value.

Inherited from com.google.gson.TypeAdapter:
fromJsonfromJsonfromJsonTreenullSafetoJsontoJsontoJsonTree

Constructor Detail

NullSafeTypeAdapterback to summary
private NullSafeTypeAdapter()

Method Detail

readback to summary
public T read(JsonReader reader) throws IOException

Implements abstract com.google.gson.TypeAdapter.read.

Doc from com.google.gson.TypeAdapter.read.

Reads one JSON value (an array, object, string, number, boolean or null) and converts it to a Java object. Returns the converted object.

Annotations
@Override
toStringback to summary
public String toString()

Overrides java.lang.Object.toString.

Doc from java.lang.Object.toString.

Returns a string representation of the object. Satisfying this method's contract implies a non-null result must be returned.

Annotations
@Override
writeback to summary
public void write(JsonWriter out, T value) throws IOException

Implements abstract com.google.gson.TypeAdapter.write.

Doc from com.google.gson.TypeAdapter.write.

Writes one JSON value (an array, object, string, number, boolean or null) for value.

Annotations
@Override