前景提要
HDC调试需求开发(15万预算),能者速来!>>>
今天跟 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