fastjson 如何对某个属性的反序列化进行自定义,以同时支持不同类型的反序列化

rnmwe5a2  于 2021-11-27  发布在  Java
关注(0)|答案(3)|浏览(521)

比如

{ "a": { "type": "base", "path": "test" } }

{ "a": "test" }

代表相同的对象,java对象如下定义

Class A {
    Property a;
}

Class Property {
    String type;
    String path;
}
irtuqstp

irtuqstp1#

继承ParserConfig重载getDeserializer方法返回自己定义类的ObjectDeserializer

5ktev3wc

5ktev3wc2#

@YoveeFisher 这个接口貌似做不到,只能支持单一的json的token,要么string,要么object,因为接口里姚指明解析哪种token

wd2eg0qa

wd2eg0qa3#

ObjectDeserializer 是个办法。
参见:#1664
给Property一个ObjectDeserializer,
然后在deserialze里,通过parser.input拿到"test"看看是不是一个json还是单个字符串,
1、如果是json,就调用JavaBeanDeserializer,走正常逻辑。
2、如果是一个字符串,new出来一个Property,再new一个A,返回。

相关问题