Fastjson 定制序列化

2021-12-09 0 By admin

fastjson支持多种方式定制序列化。

  1. 通过@JSONField定制序列化
  2. 通过@JSONType定制序列化
  3. 通过SerializeFilter定制序列化
  4. 通过ParseProcess定制反序列化

一、使用@JSONField配置

可以把@JSONField配置在字段或者getter/setter方法上。例如:

 public class VO {
  @JSONField(name="ID")
  private int id;
}

或者

 public class VO {
  private int id;
  @JSONField(name="ID")
  public int getId() { return id;}
  @JSONField(name="ID")
  public void setId(int value) {this.id = id;}
 }

若属性是私有的,必须有set*方法。否则无法反序列化。

1.1、@JSONField 注解定义

public @interface JSONField {
// 配置序列化和反序列化的顺序
    int ordinal() default 0;
// 指定字段的名称
    String name() default "";
// 指定字段的格式,对日期格式有用
    String format() default "";
// 是否序列化
    boolean serialize() default true;
// 是否反序列化
    boolean deserialize() default true;
}

二、使用@JSONType配置

和JSONField类似,但JSONType配置在类上,而不是field或者getter/setter方法上。

三、通过SerializeFilter定制序列化

通过SerializeFilter可以使用扩展编程的方式实现定制序列化。fastjson提供了多种SerializeFilter:

  1. PropertyPreFilter 根据PropertyName判断是否序列化
  2. PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
  3. NameFilter 修改Key,如果需要修改Key,process返回值则可
  4. ValueFilter 修改Value
  5. BeforeFilter 序列化时在最前添加内容
  6. AfterFilter 序列化时在最后添加内容

以上的SerializeFilter在JSON.toJSONString中可以使用。

  SerializeFilter filter = ...; // 可以是上面5个SerializeFilter的任意一种。
  JSON.toJSONString(obj, filter);

四、通过ParseProcess定制反序列化

ParseProcess是编程扩展定制反序列化的接口。fastjson支持如下ParseProcess:

  1. ExtraProcessor 用于处理多余的字段
  2. ExtraTypeProvider 用于处理多余字段时提供类型信息