- 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.
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();
New applications should prefer TypeAdapter
, whose streaming API
is more efficient than this interface's tree API.
- Author:
- Inderjeet Singh, Joel Leitch
-
Method Summary
Modifier and TypeMethodDescriptiondeserialize
(JsonElement json, Type typeOfT, JsonDeserializationContext context) Gson invokes this call-back method during deserialization when it encounters a field of the specified type.
-
Method Details
-
deserialize
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 the same type passingjson
since that will cause an infinite loop (Gson will call your call-back method again).- Parameters:
json
- The Json data being deserializedtypeOfT
- The type of the Object to deserialize to- Returns:
- a deserialized object of the specified type typeOfT which is a subclass of
T
- Throws:
JsonParseException
- if json is not in the expected format oftypeofT
-