浅谈Location:Action,新的JSON序列化的思路!

本文探讨了一种新的JSON序列化方法——Location:Action,它提供了更强大的序列化灵活性,允许针对不同对象属性指定不同的序列化策略。作者通过举例说明了如何使用Location:Action解决复杂序列化需求,并对比了传统基于Annotation和SerializerFeature的方法。同时,作者介绍了自己实现的Beetl-JSON库,作为这一思想的实践,并分享了初步的性能测试结果。
摘要由CSDN通过智能技术生成

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

 

通常来说,序列化json,实际上有2总方式

  • 通过当前流行的JSON工具。
  • 编写代码,手工序列化

这俩种方式各有优劣。第一种方式毫无疑问,不需要开发者做什么工作,直接调用序列化接口,输出就是json。但是,如果需要特殊需求,比如需要将日期格式化按照yyyy-mm-dd 输出,这些JSON工具可以指定日期格式化输出,比如FastJSON里:

SerializeConfig mapping = new SerializeConfig();
String dateFormat = "yyyy-MM-dd";  
mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat));
String json = JSON.toJSONString(obj,mapping);

 在Jackon里,代码也是类似,如:

 

ObjectMapper objectMapper = new ObjectMapper();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
objectMapper.setDateFormat(sdf);
objectMapper.writeValue(writer, obj);

 

对于这种常见需求,JSON工具总有通过Annotation&&SerializerFeature组合来解决 ,但也有应对不了的,如一下一些问题
  1. 对象里有个字段是Calendar,我想格式化yyyy-MM-dd 输出。
  2. 对象里另外有个字段也是Calendar,我想仅仅输出time(Long类型)
  3. 对象及其关联对象的id我都不想输出。
  4. 如果某个对象的集合属性为null,则仅仅输出[], 但另外一个集合属性未null,则输出null。

当前流行工具总是疲于应付这种“变态”序列化需求,不停的升级版本增加处理类来解决这些需求。有没有终极解决办法吗?

    在回答这个问题前,让我们回归到我说的第二种序列化解决方法,就是手工编写代码。通过硬编码貌似是是终极奥义。各种变态序列化需求都能通过硬编码来解决。然而,这种终极奥义的问题是序列化太麻烦了。面对企业应用,互联网应用中成百上千的模型,手工来序列化是不现实的,那么,有没有第三个办法,既能方便序列化对象,有具有很强的序列化能力,应付各

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值