今天跟 fastjson 作者 @wenshao 聊了会才找到 fastjson 如何实现类型无关的对象序列化
代码如下:
package net.oschina.j2cache.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* 使用 fastjson 进行对象的 JSON 格式序列化
*/
public class FastjsonSerializer implements Serializer {
@Override
public String name() {
return "fastjson";
}
@Override
public byte[] serialize(Object obj) {
return JSON.toJSONString(obj, SerializerFeature.WriteClassName).getBytes();
}
@Override
public Object deserialize(byte[] bytes) {
return JSON.parse(new String(bytes), Feature.SupportAutoType);
}
}
J2Cache 已经新增了这个特性,详情请看这里。
J2Cache 使用 JSON 进行缓存数据序列化的方式目前有两种,一种是 fst 自带的 JSON 序列化,另外一种就是今天新增的 fastjson 的方式。
实际测试发现 fst 的兼容性非常好,fastjson 在处理一些内嵌的类型时候会报异常:
com.alibaba.fastjson.JSONException: default constructor not found. class net.oschina.j2cache.JSONSerializerTest$1
异常对应的代码是:
person.setJobs(new HashMap<String, Integer>(){{
put("creawor", 3);
put("moabc", 5);
put("huateng", 3);
put("oschina", 8);
}});
J2Cache 提供的几种数据序列化方案请看
https://gitee.com/ld/J2Cache/tree/master/core/src/net/oschina/j2cache/util