package serializers.json;
import java.io.*;
import serializers.*;
import data.media.MediaContent;
/**
* This serializer uses Google-gson for data binding.
* to configure)
*/
public class JsonGsonDatabind
{
public static void register(TestGroups groups)
{
groups.media.add(JavaBuiltIn.mediaTransformer,
new GenericSerializer<MediaContent>("json/gson/databind", MediaContent.class),
new SerFeatures(
SerFormat.JSON,
SerGraph.FLAT_TREE,
SerClass.ZERO_KNOWLEDGE,
""
)
);
}
// ------------------------------------------------------------
// Serializer (just one)
static class GenericSerializer<T> extends Serializer<T>
{
private final com.google.gson.Gson _gson = new com.google.gson.Gson();
private final String name;
private final Class<T> type;
public GenericSerializer(String name, Class<T> clazz)
{
this.name = name;
type = clazz;
}
public String getName() { return name; }
public T deserialize(byte[] array) throws Exception
{
T result = _gson.fromJson(new String(array, "UTF-8"), type);
return result;
}
public byte[] serialize(T data) throws IOException
{
StringWriter w = new StringWriter();
_gson.toJson(data, w);
w.flush();
return w.toString().getBytes("UTF-8");
}
}
}