如何使用fastjson序列化和反序列化接口interface对象?
需要反序列化的类是A,A中包含一个接口对象B B有两个实现B1和B2
请问,我如何使用fastjson对A进行反序列化? 以往使用的是gson,gson的一种方法是通过register()
builder.registerTypeAdapter(type, new TimeSeriesIntervalAdapter());
原提问者GitHub用户RemHero
看下这个是不是你想要的 https://github.com/alibaba/fastjson2/wiki/JSONType_SeeAlso_cn
原回答者GitHub用户wenshao
在使用 Fastjson 序列化和反序列化接口(interface)对象时,需要指定具体的实现类,在反序列化时需要使用一个 TypeReference 来指定接口的具体实现类型。下面是一个示例代码:
public interface B { public String getName(); }
public class B1 implements B { private String name; public String getName() { return name; } }
public class B2 implements B { private String name; public String getName() { return name; } }
public class A { private B b; public B getB() { return b; } public void setB(B b) { this.b = b; } }
String json = "{"b":{"@type":"com.example.B1","name":"B1"}}"; A a = JSON.parseObject(json, new TypeReference() {}); System.out.println(a.getB().getName()); 在上面的代码中,我们定义了一个接口 B,以及两个实现类 B1 和 B2。同时,我们定义了一个类 A,其中有一个 B 类型的属性 b。我们使用 Fastjson 将 json 反序列化为 A 对象,并使用 TypeReference 来指定 B 的具体实现类型,从而可以正确地反序列化出 b 对象。
需要注意的是,在 json 中,我们使用了 "@type" 来指定 B 的具体实现类。这是因为在默认情况下,Fastjson 不会序列化接口类型,因此我们需要手动指定具体的实现类。另外,需要确保 json 中的实现类名称和实际的类名称一致,否则将无法正确地反序列化出对象。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。