名称
含义
备注QuoteFieldNames 输出key 时是否使⽤双引号,默认为true    UseSingleQuotes 使⽤单引号⽽不是双引号,默认为false  WriteMapNullValue 是否输出值为null 的字段,默认为false  WriteEnumUsingToString Enum 输出name()或者original,默认为false      UseISO8601DateFormat Date 使⽤ISO8601格式输出,默认为false    WriteNullListAsEmpty List 字段如果为null,输出为[],⽽⾮null      WriteNullStringAsEmpty 字符类型字段如果为null,输出为”“,⽽⾮null  WriteNullNumberAsZero 数值字段如果为null,输出为0,⽽⾮null      WriteNullBooleanAsFalse Boolean 字段如果为null,输出为false,⽽⾮null
SkipTransientField 如果是true ,类中的Get ⽅法对应的Field 是transient ,序列化时将会被忽略。默认为true  SortField
按字段名称排序后输出。默认为false    WriteTabAsSpecial 把\t 做转义输出,默认为false  PrettyFormat 结果是否格式化,默认为false
WriteClassName 序列化时写⼊类型信息,默认为false 。反序列化是需⽤到    DisableCircularReferenceDetect 消除对同⼀对象循环引⽤的问题,默认为false
WriteSlashAsSpecial 对斜杠’/’进⾏转义
BrowserCompatible 将中⽂都会序列化为\uXXXX 格式,字节数会多⼀些,但是能兼容IE 6,默认为false  WriteDateUseDateFormat 全局修改⽇期格式,默认为false 。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSONString(obj, SerializerFeature.WriteDateUseDateFormat);
DisableCheckSpecialChar ⼀个对象的字符串属性中如果有特殊字符如双引号,将会在转成json 时带有反斜杠转移符。如果不需要
转义,可以使⽤这个属性。默认为false
NotWriteRootClassName
BeanToArray
将对象转为array 输出    WriteNonStringKeyAsString 不是String 的字段写为String    NotWriteDefaultValue 不设默认值      BrowserSecure
IgnoreNonFieldGetter
忽略没有getter ⽅法的属性
⽬前版本的fastjson 默认对enum 对象使⽤WriteEnumUsingName 属性,因此会将enum 值序列化为其Name 。
使⽤WriteEnumUsingToString ⽅法可以序列化时将Enum 转换为toString()的返回值;同时override
1.问题
在使⽤fastjson 中的JSONString ⽅法将对象转换成json 字符串的时候,发现有些字段没有了。如:1
2
345678
public  static  void  main(String[] args) {        Map<String,Object>map=new  HashMap<>();        map.put("id","1");        map.put("name",null);
System.out.JSONString(map));    }
write的返回值输出结果: {"id":"1"}输出结果中没有了 "name"这个属性了;2.解决⽅式
加SerializerFeature.WriteMapNullValue)
public static void main(String[] args) {
Map<String,Object>map=new HashMap<>();        map.put("id","1");        map.put("name",null);
System.out.JSONString(map,SerializerFeature.WriteMapNullValue));    }
输出结果: {"name":null,"id":"1"}
3.原因
转json 串,默认设置了许多序列化配置:
WriteEnumUsingName 使⽤WriteEnumUsingToString⽅法可以序列化时将Enum转换为toString()的返回值;同时override toString函数能够将enum值输出需要的形式。但是这样做会带来⼀个问题,对应的反序列化使⽤的Enum的静态⽅法valueof可能⽆法识别⾃⾏⽣成的toString(),导致反序列化出错。
如果将节省enum序列化后的⼤⼩,可以将enum序列化其ordinal值,保存为int类型。fastJson在反序列化时,如果值为int,则能够使⽤ordinal值匹配,到合适的对象。
fastjson要将enum序列化为ordinal只需要禁⽌WriteEnumUsingName feature。
⾸先根据默认的features排除WriteEnumUsingName,然后使⽤新的features序列化即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。