[QUESTION]JSON.register有无通过基类或接口来注册自定义的序列化、反序列化类的方法?
JSON.register注册自定义的类型序列化,反序列化类时,能根据对象的基类或接口类来注册而不是一个一个类注册吗?
1、我自己定义了很多的枚举,都继承了一个统一的接口,我在vo里面返回到前端时,希望对象里面的枚举属性显示为接口中某方法的返回值。目前在2.0.16中通过自定义ObjectWriter,然后每个枚举进行一次JSON.register来达到这个效果。但是如果后面自定义枚举越来越多,再每个进行JSON.register就显得代码臃肿了,时间了也可能忘记这个操作。
2、以后会实现自己的JSONValue注解而不是引用jackson的JsonValue注解吗?两边的大小写策略不一致,强迫症有点难受,而且本来引用fastjson就能完事的,还得引个jackson-annoations就有点小亏。
ObjectReaderModule ObjectWriterModule
你看下这两个
ObjectReaderModule
ObjectWriterModule 你看下这两个
看了,但是还没没弄出来,有没有文档啊。现在我都是挨个实体注册的
JSONField(value = true)
这个可以代替Jackson的JsonValue
@wenshao 怎么试呢?没有可用的代码么?一个类一个类的注册,太恶心了
可以自定义ObjectReaderModule和ObjectWriterModule,比如这样: https://github.com/alibaba/fastjson2/blob/main/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSON.java#L82
static {
boolean android = JDKUtils.ANDROID;
ObjectReaderProvider readerProvider = JSONFactory.getDefaultObjectReaderProvider();
if (!android) {
readerProvider.register(AwtRederModule.INSTANCE);
}
readerProvider.register(new Fastjson1xReaderModule(readerProvider));
ObjectWriterProvider writerProvider = SerializeConfig.DEFAULT_PROVIDER;
if (!android) {
writerProvider.register(AwtWriterModule.INSTANCE);
}
writerProvider.register(new Fastjson1xWriterModule(writerProvider));
}
注册基类,确实会更方便