-
- Type Parameters:
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>Interface representing a custom serializer for Json. You should write a custom serializer, if you are not happy with the default serialization done by Gson. You will also need to register this serializer throughGsonBuilder.registerTypeAdapter(Type, Object).Let us look at example where defining a serializer 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 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 is20in 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
IdSerializerwith 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.- Author:
- Inderjeet Singh, Joel Leitch
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description JsonElementserialize(T src, Type typeOfSrc, JsonSerializationContext context)Gson invokes this call-back method during serialization when it encounters a field of the specified type.
-
-
-
Method Detail
-
serialize
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
JsonSerializationContext.serialize(Object, Type)method to create JsonElements for any non-trivial field of thesrcobject. However, you should never invoke it on thesrcobject itself since that will cause an infinite loop (Gson will call your call-back method again).- Parameters:
src- the object that needs to be converted to Json.typeOfSrc- the actual type (fully genericized version) of the source object.- Returns:
- a JsonElement corresponding to the specified object.
-
-