FastJson2 自定义局部序列化规则

需求:在实际业务中,有时需要针对某些特殊的实体对象进行定制的转JSON方式,它是局部的,比方说序列化Map对象时,比方说某些枚举需要转换为特殊的字符串时。

概述: FastJson2提供了基础的序列化器与反序列化器,包括枚举与类对象,提供了基础的处理方式。在执行转换时注册并触发。

目录

自定义序列化器

序列化过滤器

反序列化


Java对象转JSON

  • 自定义序列化器

 基础类:

  示例:

默认情况下,序列化结果如下

FastJson2包下有接口ObjectWriter ,通过实现该接口自定义序列化器,如下:

大致步骤分为

1.自定义序列化器

2.创建WriteContext并注册自定义序列化器

3.执行序列化时带上WriteContext对象作为参数。

这里需要注意的事,注册序列化器时,有2个参数,一个是Type,也就是类的class,一个是序列化器对象。这里的意思是,当执行序列化的过程中,需要处理指定类型的值时,触发该序列化器,比如图中指定Long类型,那么只对于Long类型的值转换时会触发,对于其他类型的值,比如Integer类型就没有触发。该序列化器是针对类型的,也就是当序列化的对象有多个符合条件的类型值时,会触发多次。

序列化过滤器

FastJson2提供了几个标准的过滤器接口,通过自定义不同的过滤器,并在序列化时触发实现业务需求。

*  序列化时有以下几种过滤器 同类型过滤器只能注册一个

* PropertyPreFilter 根据PropertyName判断是否序列化

* PropertyFilter 根据PropertyNamePropertyValue来判断是否序列化

* NameFilter 修改Key,如果需要修改Key,process返回值则可

* ValueFilter 修改Value

* BeforeFilter 序列化时在最前添加内容

* AfterFilter 序列化时在最后添加内容


示例:

调用JSON.toJSONString提供的重载方法,可以快速注册自定义过滤器。同类型过滤器,只会存在一个,可以看到我声明了两个ValueFilter,一个NameFilter

不同的过滤器,触发机制也不同,像ValueFilter与NameFilter,会针对每个序列化的属性,都触发。当然,这些过滤器链是有顺序的,感兴趣可以自己测试一下。

这里的枚举,转换成了字符,并不像之前的序列化结果,是一个下标值。
那是因为Feature,是FastJson2提供的标准的“特性”标签,可以有多个,
比如这里使用的JSONWriter.Feature.WriteEnumsUsingName,大致意思就是枚举取枚举名(默认取下标),对这次序列化的所有枚举都生效。

序列化器与序列化过滤器可以一起使用

反序列化

反序列化的过程大致为两个,一是属性名的匹配映射,二是值的类型转换

这里在name属性名相同的情况下,直接进入value的类型转换
与序列化相同,fastJson2提供了基础的反序列化器,也可以自定义反序列化器,并注册指定类型触发。
 示例:

先创建两个反序列化器

注册指定类型

以上的规则都是局部的,因为参数传递,所以生效。对全局是没有影响的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值