Skip to content

Features_cn

温绍锦 edited this page May 9, 2022 · 7 revisions

通过Features配置序列化和反序列化的行为

1. Feature介绍

在fastjson 2.x中,有两个Feature,分别用来配置序列化和反序列化的行为

  • JSONWriter.Feature 配置序列化的行为
  • JSONReader.Feature 配置反序列化的行为

2. 在JSON的toJSONString和parse方法中使用Feature

2.1 在JSON的toJSONString方法中使用JSONWriter.Feature

Bean bean = ...;
JSON.toJSONString(bean, JSONWriter.Feature.WriteNulls); // 输出对象中值为null的字段

2.2 在JSON的parse方法中使用JSONReader.Feature

String jsonStr = ...;
JSON.parseObject(jsonStr, JSONReader.Feature.UseBigDecimalForDoubles); // 将小数数值读取为double

3. 在JSONField和JSONType上配置features

class Model {
    @JSONField(serializeFeatures = JSONWriter.Feature.BrowserCompatible)
    public long value;
}
***

4. JSONReader.Feature介绍

JSONReader.Feature 介绍
FieldBased 基于字段反序列化,如果不配置,会默认基于public的field和getter方法序列化。配置后,会基于非static的field(包括private)做反序列化。在fieldbase配置下会更安全
IgnoreNoneSerializable 反序列化忽略非Serializable类型的字段
SupportArrayToBean 支持数据映射的方式
InitStringFieldAsEmpty 初始化String字段为空字符串""
SupportAutoType 支持自动类型,要读取带"@type"类型信息的JSON数据,需要显示打开SupportAutoType
SupportSmartMatch 默认下是camal case精确匹配,打开这个后,能够智能识别camal/upper/pascal/snake/Kebab五中case
UseNativeObject 默认是使用JSONObject和JSONArray,配置后会使用LinkedHashMap和ArrayList
SupportClassForName 支持类型为Class的字段,使用Class.forName。为了安全这个是默认关闭的
IgnoreSetNullValue 忽略输入为null的字段
UseDefaultConstructorAsPossible 尽可能使用缺省构造函数,在fieldBase打开这个选项没打开的时候,会可能用Unsafe.allocateInstance来实现
UseBigDecimalForFloats 默认配置会使用BigDecimal来parse小数,打开后会使用Float
UseBigDecimalForDoubles 默认配置会使用BigDecimal来parse小数,打开后会使用Double
ErrorOnEnumNotMatch 默认Enum的name不匹配时会忽略,打开后不匹配会抛异常
Clone this wiki locally