fastjson enum 枚举 反序列化

fastjson enum 枚举 反序列化,第1张

看fastjson源码,SerializeWriter

 public void writeEnum(Enum<?> value, char c) {

if (value == null) {

writeNull()

write(',')

return

}

if (isEnabled(SerializerFeature.WriteEnumUsingToString)) {

if (isEnabled(SerializerFeature.UseSingleQuotes)) {

write('\'')

write(value.name())

write('\'')

write(c)

} else {

write('\"')

write(value.name())

write('\"')

write(c)

}

return

}

writeIntAndChar(value.ordinal(), c)

}

可以看出SerializeWriter在初始化的时候,features不要设置SerializerFeature.WriteEnumUsingToString

因为JSON.DEFAULT_PARSER_FEATURE是enable了SerializerFeature.WriteEnumUsingToString,也就是说是读枚举的value值而不是int值

public static int    DEFAULT_GENERATE_FEATURE

static {

int features = 0

features |= com.alibaba.fastjson.serializer.SerializerFeature.QuoteFieldNames.getMask()

features |= com.alibaba.fastjson.serializer.SerializerFeature.SkipTransientField.getMask()

features |= com.alibaba.fastjson.serializer.SerializerFeature.WriteEnumUsingToString.getMask()

features |= com.alibaba.fastjson.serializer.SerializerFeature.SortField.getMask()

// features |=

// com.alibaba.fastjson.serializer.SerializerFeature.WriteSlashAsSpecial.getMask()

DEFAULT_GENERATE_FEATURE = features

}

所以,解决你这个问题的方法就是

之前调用下

JSONSerializer.config(SerializerFeature.WriteEnumUsingToString,false)

即可

@JSONField

作用:在字段和方法上

1 .Field:@JSONField作用在Field时,name可以定义输入key的名字,反序列化的时 值不会赋值到属性

2 .作用在setter和getter方法上

3 .format :用在Date类型的字段来格式化时间格式

4 .布尔类型:serialize和deserialize

在序列化的时候就不包含这个字段了。deserialize与之相反。但是有一点需要注意,当字段为final的时候注解放在字段上是不起作用的,这时候应该放在get或set方法上。

5. serialzeFeatures 属性:fastjson默认的序列化规则是当字段的值为null的时候,是不会序列化这个字段

对象序列化下边的类,结果是:{"name":"LiSi","age":18}

6 .SerializerFeature枚举

当value的值为null的时候,依然会把它的值序列化出来: {"name":"LiSi","age":18,"address":null}

当字段类型为int类型时,会序列化成 0,需要把类型改成Integer

1 . 引入jar包

2 . jsonProperty介绍

@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty(value="name")。

3 . jackson的@JsonIgnore使用

作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

使用方法:一般标记在属性或者方法上,返回的json数据即不包含该属性。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/bake/11952542.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存