** fastjson 版本: 1.2.36 **
主要 API
序列化 API (String JSON.toJSONString(Object …)) : 将对象序列化为 json 字符串
反序列化 API (T JSON.parseObject(String str, …)) 将 json 字符串序列化为对象.
JSON.toJSONString(Object …)
有多个重载方法,不同的参数对序列化过程进行控制。可以看到,主要是通过三个参数来对序列化进行干预的,SerializeConfig
这是序列化全局配置, SerializeFilter
序列化过滤器,SerializeFeature
这是fastjson自定义的特征枚举变量,定制序列化过程。
SerializeFeature
为什么先说这个,因为这个应用范围最广,能够覆盖大部分的序列化要求。
这是一个枚举类,列举了一系列序列化的参数。
package com.alibaba.fastjson.serializer;
/**
*
*/
public enum SerializerFeature {
QuoteFieldNames, // 输出 Key 时是否使用双引号, 默认 true
UseSingleQuotes, // 输出key时使用单引号而不是双引号, 默认 false
WriteMapNullValue, // 是否输出值为 null 的字段, 默认 false, 默认不输出值为 null 的字段
WriteEnumUsingToString, // Enum 输出其toString() 值,可以重写 toString 来自定义输出形式,但是这样做会带来一个问题,对应的反序列化使用的Enum的静态方法valueof可能无法识别自行生成的toString(),导致反序列化出错
WriteEnumUsingName, // Enum 输出其name() 值,默认 true, 如果需要序列化其 ordinal() 值, 禁用掉该选项,如何禁用具体代码见后文
UseISO8601DateFormat, // Date使用ISO8601格式输出,默认为 false
WriteNullListAsEmpty, // List 字段如果为 null,输出 [] 而不是 null,默认 false
WriteNullStringAsEmpty, // String 字段如果为 null, 输出 "",而不是 null,默认 false
WriteNullNumberAsZero, // 数值字段如果为 null, 输出0而不是null,默认 false
WriteNullBooleanAsFalse, // Boolean字段如果为 null, 输出 false而不是 null,默认 false
SkipTransientField, // 字段如果加了@Transient 注解,则不序列化该字段, 默认 true
SortField, // 按字段名称排序后输出, 默认 true, 会按字段名称字母排序。
/** @deprecated */
@Deprecated
WriteTabAsSpecial,
PrettyFormat, // 是否格式化输出
WriteClassName, // 序列化时写入类型信息,默认 false。反序列化时需用到
DisableCircularReferenceDetect, //消除对同一对象循环引用的问题,默认 false
WriteSlashAsSpecial, // 对斜杠 / 进行转义, 转义成 \/
BrowserCompatible,
WriteDateUseDateFormat, // 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
NotWriteRootClassName,
/** @deprecated */
DisableCheckSpecialChar, //一个对象的字符串属性