Public 成员函数 | |
| T | deserialize (JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException |
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
class defined below has two fields:
and
.
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
will require the Json string to be {"clazz":com.foo.MyObject,"value":20}. Suppose, you already know the type of the field that the
will be deserialized into, and hence just want to deserialize it from a Json string
. 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 {
return new Id((Class)typeOfT, id.getValue());
}
You will also need to register
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.
| <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. |
| T com.google.gson.JsonDeserializer< 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 passing
since that will cause an infinite loop (Gson will call your call-back method again).
| json | The Json data being deserialized |
| typeOfT | The type of the Object to deserialize to |
| JsonParseException | if json is not in the expected format of typeofT
|
1.8.8