package jef.json;
import java.io.IOException;
import java.lang.reflect.Type;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;
import com.alibaba.fastjson.serializer.SerialContext;
import com.alibaba.fastjson.serializer.SerializeWriter;
/**
* 为了在FastJson中实现一个类似于Google Gson的TypeAdapter这样的东西抽象类,
* 和过滤器类似,让用户自行编码将要序列化的对象编码成一个其他的东西,然后序列化。最常见的办法是返回一个JSONObject或者JSONArray(和gson一样的处理办法)。
* 这个工具类可以方便将gson的逻辑移植到fastjson上来。
*
*
*
*
*
* 遗留问题:全序列化场合下,记录的classname不对。这个问题暂不考虑。需要的时候抄一下JavaBeanSerializer的代码再该写一下就可以了。
* @author jiyi
*
* @param <T>
*/
public abstract class JsonTypeSerializer<T> implements ObjectSerializer{
@SuppressWarnings("unchecked")
public final void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,int features) throws IOException {
SerializeWriter out=serializer.getWriter();
if (object == null) {
out.writeNull();
return;
}
if (serializer.containsReference(object)) {
serializer.writeReference(object);
return;
}
SerialContext parent = serializer.getContext();
serializer.setContext(parent, object, fieldName,0);
serializer.write(processToJson((T)object));
}
protected abstract Object processToJson(T t);
}