Moshi是否拥有类似Gson的Runtime Type Adapter Factory?
使用Gson的RuntimeTypeAdapterFactory处理多态类型适配
我已经用Gson开发好几周了,最近发现RuntimeTypeAdapterFactory这个类简直是处理多态类型序列化/反序列化的神器——它能完美适配那些运行时类型和声明类型不一致的值,帮我解决了之前头疼的多类型匹配问题!
下面是我目前在项目里使用的代码片段:
public class Database { private final Gson gson; private Database() { // 初始化Gson的RuntimeTypeAdapterFactory RuntimeTypeAdapterFactory<Base> runtimeTypeAdapterFactory = RuntimeTypeAdapterFactory .of(Base.class, "table") .registerSubtype(AdminsTbl.class, "admins"); this.gson = new GsonBuilder() .registerTypeAdapterFactory(runtimeTypeAdapterFactory) // 可根据需求添加其他配置,比如日期格式、空值序列化策略等 .create(); } // 这里可以添加数据库相关的业务方法,比如序列化实体到JSON、反序列化JSON到实体等 }
简单拆解一下这段代码的核心逻辑:
- 指定基类与类型标识字段:
RuntimeTypeAdapterFactory.of(Base.class, "table")定义了基类是Base,同时用JSON里的"table"字段来区分不同的子类型; - 绑定子类与标识:
registerSubtype(AdminsTbl.class, "admins")把AdminsTbl子类和标识字符串"admins"关联起来,这样Gson在处理时,看到"table":"admins"就知道要反序列化成AdminsTbl实例; - 注册工厂构建Gson:把这个类型适配器工厂注册到
GsonBuilder后,生成的Gson实例就能自动处理多态类型的序列化和反序列化,不用再手动写复杂的类型转换逻辑。
用这个工具类之后,处理多态场景的代码简洁了很多,再也不用纠结类型不匹配的问题啦~
内容的提问来源于stack exchange,提问作者Piorrro33
相关产品推荐
相关产品推荐

