但是 FST 在序列化时,一些诸如类型、对象等元数据用的字段名称经常会有缓存对象的名称有冲突,例如 FST 用 typ 来标识对象的类型,用 obj 来标识对象本身等。为了能与正常对象的属性名区分开,这次 2.4.1 版本对这些元数据名称进行了重新定义,如下表所示:
FST 属性名 | 调整后的属性名 | 说明 |
typ | @type | 标识对象类型,如类名 |
obj | @object | 对象本身 |
styp | @stype | |
seq | @seq | |
enum | @enum | 枚举类型 |
val | @value | |
ref | @ref |
下面是一个对象序列化成 JSON 数据的样子:
{"@type":"person","@object":{"age":19,"jobs":{"@type":"map","@object":[4,"creawor",3,"huateng",3,"moabc",5,"oschina",8]},"schoolList":{"@type":"list","@object":[4,{"@type":"school","@object":{"random":652,"name":"西北工业大学"}},{"@type":"school","@object":{"random":579,"name":"泉州第五中学"}},{"@type":"school","@object":{"random":549,"name":"城东中学"}},{"@type":"school","@object":{"random":891,"name":"洛南小学"}}]},"name":"Winter Lau"}}
此外,2.4.1 版本还新增自定义 FST 类型序列化对应短名称,上面的 JSON 数据中,@type 值为 person ,其实对应的全类名是 net.oschina.j2cache.Person ,可直接在 j2cache.properties 中进行配置:
json.map.person = net.oschina.j2cache.Person
这样首先是减小 JSON 的体积,其次是更便于在多语言环境中使用。
此外,该版本还增加了使用 fastjson 进行序列化的扩展,但是经测试,暂时不推荐使用。
Maven:
<dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-core</artifactId> <version>2.4.1-release</version> </dependency>
即刻前往 https://gitee.com/ld/J2Cache 吐槽或者点赞。