fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[QUESTION]JSON.register有无通过基类或接口来注册自定义的序列化、反序列化类的方法?

Open yhl452493373 opened this issue 3 years ago • 6 comments

JSON.register注册自定义的类型序列化,反序列化类时,能根据对象的基类或接口类来注册而不是一个一个类注册吗?

1、我自己定义了很多的枚举,都继承了一个统一的接口,我在vo里面返回到前端时,希望对象里面的枚举属性显示为接口中某方法的返回值。目前在2.0.16中通过自定义ObjectWriter,然后每个枚举进行一次JSON.register来达到这个效果。但是如果后面自定义枚举越来越多,再每个进行JSON.register就显得代码臃肿了,时间了也可能忘记这个操作。

2、以后会实现自己的JSONValue注解而不是引用jackson的JsonValue注解吗?两边的大小写策略不一致,强迫症有点难受,而且本来引用fastjson就能完事的,还得引个jackson-annoations就有点小亏。

yhl452493373 avatar Oct 27 '22 05:10 yhl452493373

ObjectReaderModule ObjectWriterModule

你看下这两个

wenshao avatar Oct 27 '22 11:10 wenshao

ObjectReaderModule

ObjectWriterModule 你看下这两个

看了,但是还没没弄出来,有没有文档啊。现在我都是挨个实体注册的

yhl452493373 avatar Oct 28 '22 11:10 yhl452493373

JSONField(value = true)

这个可以代替Jackson的JsonValue

wenshao avatar Mar 01 '23 18:03 wenshao

@wenshao 怎么试呢?没有可用的代码么?一个类一个类的注册,太恶心了

hks2002 avatar Jun 24 '23 11:06 hks2002

可以自定义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));
    }

wenshao avatar Jun 24 '23 11:06 wenshao

注册基类,确实会更方便

windhc avatar Jan 29 '24 05:01 windhc