com.google.gson.GsonBuilder#registerTypeAdapter(Type, Object) .
Let us look at example where defining a serializer 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 serialization of Id(com.foo.MyObject.class, 20L) will be
{"clazz":"com.foo.MyObject","value":20}. Suppose, you just want the output to be the value
instead, which is 20 in this case. You can achieve that by writing a custom serializer:
class IdSerializer implements JsonSerializer<Id> {
public JsonElement serialize(Id id, Type typeOfId, JsonSerializationContext context) {
return new JsonPrimitive(id.getValue());
}
}
You will also need to register IdSerializer with Gson as follows:
Gson gson = new GsonBuilder().registerTypeAdapter(Id.class, new IdSerializer()).create();
Serializers 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.
| Modifier and Type | Method and Description |
|---|---|
| public JsonElement | Returns: a JsonElement corresponding to the specified object.the object that needs to be converted to Json. src, Type the actual type (fully genericized version) of the source object. typeOfSrc, JsonSerializationContext context)Gson invokes this call-back method during serialization when it encounters a field of the specified type. |
| serialize | back to summary |
|---|---|
| public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) Gson invokes this call-back method during serialization when it encounters a field of the specified type. In the implementation of this call-back method, you should consider invoking
| |