开发者社区> 问答> 正文

如何使用fastjson序列化和反序列化接口interface对象?

如何使用fastjson序列化和反序列化接口interface对象?

需要反序列化的类是A,A中包含一个接口对象B B有两个实现B1和B2

请问,我如何使用fastjson对A进行反序列化? 以往使用的是gson,gson的一种方法是通过register()

builder.registerTypeAdapter(type, new TimeSeriesIntervalAdapter());

原提问者GitHub用户RemHero

展开
收起
后端老大 2023-04-21 10:58:09 357 0
2 条回答
写回答
取消 提交回答
  • 看下这个是不是你想要的 https://github.com/alibaba/fastjson2/wiki/JSONType_SeeAlso_cn

    原回答者GitHub用户wenshao

    2023-04-21 14:04:25
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    在使用 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 中的实现类名称和实际的类名称一致,否则将无法正确地反序列化出对象。

    2023-04-21 11:12:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载