FastJson使用Serializer和Deserializer实现枚举类自定义序列化
背景
在公司写代码的时候,有些场景必须,或者只能用Fastjson
,比如人家封装了一层,或者其他什么场景,这时候可能会想自定义序列化。Fastjson
提供了一些能力,可以应对大家的诉求。比如:
某个属性序列化时候的key,不用变量名而是用别的。
序列化的时候忽略某个属性,让他不输出。
但是下面这些场景,我们需要用到Fastjson
提供的更强大的功能:
- 我自己写了个枚举类,但是
Fastjson
的枚举类默认自定义序列化/反序列化的能力不够,或者能力够了,用起来很麻烦。 - 我需要一些很底层,很不套路的序列化能力。比如是个
Pojo
对象,那么给它序列化的时候,输出的字符串怎么也得套一层花括号{}
吧?这时候我不想要花括号,我想直接输出值怎么办?
这时候需要用到自定义的Serializer
和Deserializer
。
代码
首先定义一个自己的枚举类,其实你换成Pojo
也是一样的。
1 | public enum TestEnum { |
自定义的Deserializer
:
1 | "unchecked") ( |
自定义的Serializer
:
1 | public class TestEnumSerializer implements ObjectSerializer { |
现在还有个问题,做到这一步,每次序列化/反序列化的时候,需要手动指定 Serializer
或者Deserializer
。这固然可以,但是如果需要自动的话,就得在程序启动之前,全局注册一下。
也就是将你的自定义类的类型,和你的Serializer
以及Deserializer
绑定一下,否则Fastjson
这个类要用你的自定义序列化策略呢。
如果是
SpringBoot
应用,建议用@Component注解和PostConstruct注解,轻松完成
1 |
|
参考
Github一篇文章和CSDN一篇文章,具体忘记了。如果侵权请联系。