package serializers.json; import java.io.*; import serializers.*; import data.media.MediaContent; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; /** * This serializer uses FastJSON [https://github.com/alibaba/fastjson] for JSON data binding. */ public class FastJSONDatabind { public static void register(TestGroups groups) { groups.media.add(JavaBuiltIn.mediaTransformer, new GenericSerializer<MediaContent>("json/fastjson/databind", MediaContent.class), new SerFeatures( SerFormat.JSON, SerGraph.FLAT_TREE, SerClass.ZERO_KNOWLEDGE, "" ) ); } static class GenericSerializer<T> extends Serializer<T> { private final String name; private final Class<T> type; public GenericSerializer(String name, Class<T> clazz) { this.name = name; type = clazz; } @Override public String getName() { return name; } public void serializeItems(T[] items, OutputStream out) throws IOException { for (int i = 0, len = items.length; i < len; ++i) { JSON.writeJSONString(out, items[i], SerializerFeature.WriteEnumUsingToString, SerializerFeature.DisableCircularReferenceDetect); } } @SuppressWarnings("unchecked") @Override public T deserialize(byte[] array) throws Exception { // fastjson can parse from byte array, yay: return (T) JSON.parseObject(array, type, Feature.DisableCircularReferenceDetect); } @Override public byte[] serialize(T data) throws IOException { return JSON.toJSONBytes(data, SerializerFeature.WriteEnumUsingToString,SerializerFeature.DisableCircularReferenceDetect); } } }