fastjson SerializerFeature.WriteClassName 的问题

kmynzznz  于 2021-11-27  发布在  Java
关注(0)|答案(4)|浏览(492)

我这两个问题是有点强迫症了,但是还想问问能不能实现
@JSONType(serialzeFeatures = SerializerFeature.WriteClassName) public class Test{List<Parent> list = new ArrayList<Parent>(); ....}

1、@JSONType(serialzeFeatures = SerializerFeature.WriteClassName)
这个语法现在是不报错的,但是没有任何的作用,我想指定某些类实现WriteClassName,而不是通过JSON.toJSONString传入了SerializerFeature.WriteClassName,结果很多的类都得写“@type”
2、如果Parent是个父类,list中放入了大量的子类,如果传了WriteClassName,每个元素都得拼接一个“@type”,能不能实现类似于 "$ref"的功能,将“@type”也进行引用,例如第一次出现,“@type":"Parent#1”,
之后再出现,就“@type":"#1

我在本地尝试过很多的方案,例如 自定义JavaBeanDeserializer,JavaBeanSerializer,或者BeforeFilter等实现,但是感觉代码的入侵性太强了,不够优雅,我就想问问,官方能把这两个功能给添加进去。

我主要是对生成后的json字符串大小有点强迫症,想尽量的小一点。

在本地尝试的方案中,我又想到了个点,能不能在 @JSONType中增加SerializeFilter的数组,这样我可以对某个类进行单独的定制序列化,而不是所有类序列化都得通过SerializeFilter的判断。

vql8enpb

vql8enpb1#

json和xml、html类的都是有大量重复模式,如果走http的话,开gzip,完胜一切在细节上处理的方案。

bq3bfh9z

bq3bfh9z2#

所以说我有点强迫症,并且在这个研究过程中,我对fastjson的大概的架构有了了解

3b6akqbq

3b6akqbq3#

这个功能对我很有用。
我经常碰到的问题,当我在使用泛型类的时候,在一些地方使用了JSON.toJsonString(obj),并没有包含泛型的*@type字段,这样反序列化回来的时候是不能反序列化成对应的子类的,在单元测试还有很多地方是需要重复写JSON.toJsonString(obj,s...WriteClassName).要是能够用@JsonType(se...WriteClassName)*对我来讲特别好用。要是能够在字段上使用@JsonField(se...WriteClassName)就更直接了。
我不知道是不是有更好的解决方法,我看了文档中介绍的方法,不管使用定义serializer或者filter让我感觉都不如这种写法更好。不知道是因为实现上的难度还是因为啥,有这个属性却没有用,蛮奇怪的。

62o28rlo

62o28rlo4#

不想加一个@type这样的字段注入到json中,可以实现自定义的字段注入吗?比如在每个具体的子类中加了一个指定的枚举类型,枚举中指定了每种子类的实现类的clazz,但是在自定义的Deserializer中,通过父类的clazz注入自定义的反序列化器,尝试了很久,发现无法实现想要的结果。最后实在没办法,只有根据枚举类型,强制去显示一个个的创建对应的具体类型的对象来实现。

相关问题