一、Fastjson自定义序列化
通过SerializeFilter可以使用扩展编程的方式实现定制序列化。fastjson提供了多种SerializeFilter:
- PropertyPreFilter
根据PropertyName判断是否序列化 - PropertyFilter
根据PropertyName和PropertyValue来判断是否序列化 - NameFilter
修改Key,如果需要修改Key,process返回值则可 - ValueFilter
修改Value - BeforeFilter
序列化时在最前添加内容 - AfterFilter
序列化时在最后添加内容
二、导入依赖
- 导入pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
三、序列化示例
- 例子
- 代码
|
1、PropertyPreFilter
- 根据PropertyName判断是否序列化
- 只根据object和name进行判断,在调用getter之前,这样避免了getter调用可能存在的异常。
- demo如下:
public static void main(String[] args){ |
- 只有userName返回true,所以只序列化 userName
2、PropertyFilter
- 根据PropertyName和PropertyValue来判断是否序列化
public static void main(String[] args){ |
- id不序列化,age小于18不序列化
3、NameFilter
- 修改Key,如果需要修改Key,process返回值则可
public static void main(String[] args){ |
- 注意看,userName,已经变成小写,这个时修改key的,key全部转小写
4、ValueFilter
- 修改Value
public static void main(String[] args){ |
- 修改age为18
5、BeforeFilter
- 序列化时在最前添加内容
public static void main(String[] args){ |
6、AfterFilter
- 序列化时在最后添加内容
public static void main(String[] args){ |
四、注解的方式序列化
- 通过
@JSONField
定制序列化 - 通过
@JSONType
定制序列化 - 通过
SerializeFilter
定制序列化 - 通过
ParseProcess
定制反序列化
例子1
- 在属性上使用注解
public class VO { |
例子2
- 使用serialize/deserialize指定字段不序列化
public class A { |
例子3
- 使用serializeUsing制定属性的序列化类
- 在fastjson 1.2.16版本之后,JSONField支持新的定制化配置serializeUsing,可以单独对某一个类的某个属性定制序列化,比如:
public static class Model { |
- 测试代码:
Model model = new Model(); |