Top Description Methods
com.google.gson

public Interface JsonDeserializer<T>

Type Parameters
<T>
type for which the deserializer is being registered. It is possible that a deserializer may be asked to deserialize a specific generic type of the T.
Imports
java.lang.reflect.Type

Interface representing a custom deserializer for JSON. You should write a custom deserializer, if you are not happy with the default deserialization done by Gson. You will also need to register this deserializer through GsonBuilder#registerTypeAdapter(Type, Object).

Let us look at example where defining a deserializer will be useful. The Id class defined below has two fields: clazz and value.

public class Id<T> {
  private final Class<T> clazz;
  private final long value;
  public Id(Class<T> clazz, long value) {
    this.clazz = clazz;
    this.value = value;
  }
  public long getValue() {
    return value;
  }
}

The default deserialization of Id(com.foo.MyObject.class, 20L) will require the JSON string to be {"clazz":"com.foo.MyObject","value":20}. Suppose, you already know the type of the field that the Id will be deserialized into, and hence just want to deserialize it from a JSON string 20. You can achieve that by writing a custom deserializer:

class IdDeserializer implements JsonDeserializer<Id> {
  public Id deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
      throws JsonParseException {
    long idValue = json.getAsJsonPrimitive().getAsLong();
    return new Id((Class) typeOfT, idValue);
  }
}

You will also need to register IdDeserializer with Gson as follows:

Gson gson = new GsonBuilder().registerTypeAdapter(Id.class, new IdDeserializer()).create();

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

New applications should prefer TypeAdapter, whose streaming API is more efficient than this interface's tree API.

Authors
Inderjeet Singh, Joel Leitch

Method Summary

Modifier and TypeMethod and Description
public T

Returns:

a deserialized object of the specified type typeOfT which is a subclass of T
deserialize
(JsonElement
The Json data being deserialized
json
,
Type
The type of the Object to deserialize to
typeOfT
,
JsonDeserializationContext context)

Gson invokes this call-back method during deserialization when it encounters a field of the specified type.

Method Detail

deserializeback to summary
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException

Gson invokes this call-back method during deserialization when it encounters a field of the specified type.

In the implementation of this call-back method, you should consider invoking JsonDeserializationContext#deserialize(JsonElement, Type) method to create objects for any non-trivial field of the returned object. However, you should never invoke it on the same type passing json since that will cause an infinite loop (Gson will call your call-back method again).

Parameters
json:JsonElement

The Json data being deserialized

typeOfT:Type

The type of the Object to deserialize to

Returns:T

a deserialized object of the specified type typeOfT which is a subclass of T

Exceptions
JsonParseException:
if json is not in the expected format of typeOfT