-
- 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.
public interface JsonDeserializer<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 throughGsonBuilder.registerTypeAdapter(Type, Object).Let us look at example where defining a deserializer will be useful. The
Idclass defined below has two fields:clazzandvalue.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 theIdwill be deserialized into, and hence just want to deserialize it from a JSON string20. 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
IdDeserializerwith 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
Gsonmight not apply.New applications should prefer
TypeAdapter, whose streaming API is more efficient than this interface's tree API.- Author:
- Inderjeet Singh, Joel Leitch
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description Tdeserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)Gson invokes this call-back method during deserialization when it encounters a field of the specified type.
-
-
-
Method Detail
-
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 same type passingjsonsince 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
-
-