package serializers.json;
import java.io.*;
import serializers.*;
import data.media.Image;
import data.media.MediaContent;
/**
* This serializer uses svenson for JSON data binding.
*/
public class JsonSvensonDatabind
{
public static void register(TestGroups groups)
{
groups.media.add(JavaBuiltIn.mediaTransformer,
new GenericSerializer<MediaContent>("json/svenson/databind", MediaContent.class),
new SerFeatures(
SerFormat.JSON,
SerGraph.FLAT_TREE,
SerClass.MANUAL_OPT,
""
)
);
}
static class GenericSerializer<T> extends Serializer<T>
{
private final org.svenson.JSONParser _jsonParser;
private final org.svenson.JSON _jsonWriter;
private final String name;
private final Class<T> type;
public GenericSerializer(String name, Class<T> clazz)
{
this.name = name;
type = clazz;
_jsonParser = org.svenson.JSONParser.defaultJSONParser();
_jsonParser.addTypeHint(".images[]", Image.class);
_jsonWriter = org.svenson.JSON.defaultJSON();
}
@Override
public String getName()
{
return name;
}
@Override
public T deserialize(byte[] array) throws Exception
{
return _jsonParser.parse(type, new String(array, "UTF-8"));
}
@Override
public byte[] serialize(T data) throws IOException
{
String result = _jsonWriter.forValue(data);
return result.getBytes();
}
}
}