T
- type for which the serializer is being registered. It is possible that a serializer
may be asked to serialize a specific generic type of the T.public interface JsonSerializer<T>
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();
New applications should prefer TypeAdapter
, whose streaming API
is more efficient than this interface's tree API.
Modifier and Type | Method and Description |
---|---|
JsonElement |
serialize(T src,
java.lang.reflect.Type typeOfSrc,
JsonSerializationContext context)
Gson invokes this call-back method during serialization when it encounters a field of the
specified type.
|
JsonElement serialize(T src, java.lang.reflect.Type typeOfSrc, JsonSerializationContext context)
In the implementation of this call-back method, you should consider invoking
JsonSerializationContext.serialize(Object, Type)
method to create JsonElements for any
non-trivial field of the src
object. However, you should never invoke it on the
src
object itself since that will cause an infinite loop (Gson will call your
call-back method again).
src
- the object that needs to be converted to Json.typeOfSrc
- the actual type (fully genericized version) of the source object.Copyright © 2018. All Rights Reserved.