浏览 1720 次
锁定老帖子 主题:fastjson实现自省功能优化
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-21
最后修改:2011-09-21
{"id":12,"name":"魏嘉留"} fastjson支持传入类型信息,例如: String text = ...; // {"id":12,"name":"魏嘉留"} JSON.parseObject(text, Employee.class); 如果序列化时,使用WriteClassName的特性,JSON文本是这样: Employee x = ...; String text = JSON.toJSONString(x, SerializerFeature.WriteClassName); 上面例子中的JSON文本是: {"@type":"com.alibaba.demo.Employee", "id":12,"name":"魏嘉留"} 带有@type属性的文本将会被自动识别类型,上面的文本可以这样处理: Employee x = (Employee) JSON.parse(text); 这就是Fastjson支持的自省功能。 但是使用WriteClassName之后,json文本的大小增加了许多,这个怎么办呢?fastjson 1.1.6版本将会做优化处理,非必要,不输出类型信息。 class A { B getB(); setB(B b); } 类A拥有属性B,A和B都是对象,但是反序列化的时候,能够根据Property的类型信息得到B的类型,这时只需要输出A的类型,不需要输出B的类型信息。 例如: {"@type":"com.alibaba.json.demo.A","b":{"id":0}} 在1.1.5之前的版本则会如下: {"@type":"com.alibaba.json.demo.A","b":{"@type":"com.alibaba.json.demo.B","id":0}} 通过这种办法可以用List<T>类型的属性,由此能够减少冗余不必要的类型信息。 如下是一些测试用例: http://code.alibabatech.com/svn/fastjson/trunk/fastjson/src/test/java/com/alibaba/json/test/bvt/writeClassName/WriteClassNameTest2.java [url]http://code.alibabatech.com/svn/fastjson/trunk/fastjson/src/test/java/com/alibaba/json/test/bvt/writeClassName/WriteClassNameTest_List2.java [/url] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |