使用 fastjson 实现类型无关的对象序列化

红薯 发布于 2018/08/08 12:01
阅读 6K+
收藏 3

今天跟 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

加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部