fastjson实现自省功能优化

转载自温少的ITeye博客http://wenshao.iteye.com/blog/1177410

JSON标准是不支持自省的,也就是说如下的JSON文本,你不知道它是什么类型:

Java代码
  1. {"id":12,"name":"魏嘉留"}


fastjson支持传入类型信息,例如:
Stringtext=...;//{"id":12,"name":"魏嘉留"}
  • JSON.parSEObject(text,Employee.class);

  • 如果序列化时,使用WriteClassName的特性,JSON文本是这样:
    Employeex=...;
  • Stringtext=JSON.toJSONString(x,SerializerFeature.WriteClassName);

  • 上面例子中的JSON文本是:
    {“@type”:"com.alibaba.demo.Employee","id":带有@type属性的文本将会被自动识别类型,上面的文本可以这样处理:
    Employeex=(Employee)JSON.parse(text);

    这就是Fastjson支持的自省功能
    但是使用WriteClassName之后,json文本的大小增加了许多,这个怎么办呢?fastjson 1.1.6版本将会做优化处理,非必要,不输出类型信息。
    classA{
  • BgetB();
  • setB(Bb);
  • }

  • 类A拥有属性B,A和B都是对象,但是反序列化的时候,能够根据Property的类型信息得到B的类型,这时只需要输出A的类型,不需要输出B的类型信息。
    例如:
    {"@type":"com.alibaba.json.demo.A","b":{"id":0}}

    在1.1.5之前的版本则会如下:
    "b":{"@type":"com.alibaba.json.demo.B",sans-serif; font-size:14px; line-height:25px; text-align:left">通过这种办法可以用List<T>类型的属性,由此能够减少冗余不必要的类型信息。
    如下是一些测试用例:
    http://code.alibabatech.com/svn/fastjson/trunk/fastjson/src/test/java/com/alibaba/json/test/bvt/writeClassName/WriteClassNameTest2.java
    http://code.alibabatech.com/svn/fastjson/trunk/fastjson/src/test/java/com/alibaba/json/test/bvt/writeClassName/WriteClassNameTest_List2.java

    相关文章

    AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
    在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
    在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
    AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
    AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
    Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...