You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已配置自定义TypeConverter仍出现SerializationException问题求助

问题根因

你的类型转换器内部混用了两套JSON解析库,是触发异常的直接原因:

  • 存储数据时(List<Weather>转字符串存入数据库):你用了Gson的gson.toJson(value)做序列化
  • 读取数据时(从数据库取出字符串转回List<Weather>):你用了Kotlinx序列化的Json.decodeFromString(value)做反序列化
    Kotlinx序列化属于编译时解析框架,要求目标类必须标注@Serializable注解生成对应序列化器才能正常工作,你没有给Weather类加该注解,所以抛出了Serializer not found的异常。

修复方案

两种方案二选一即可,推荐选择方案一,修改量最小:

方案一:统一使用Gson做转换(无需修改原有实体类)

直接替换Converters类中的toWeatherList方法,用Gson实现List<Weather>的反序列化即可:

@TypeConverter
fun toWeatherList(value: String): List<Weather> = gson.fromJson(value, object : TypeToken<List<Weather>>() {}.type)

方案二:统一使用Kotlinx序列化做转换

需要修改三处代码:

  • 给Weather类添加@Serializable注解
  • 把Converters类中所有Gson相关的序列化逻辑全部替换为Kotlinx序列化的对应API
  • 确认项目gradle配置中已经正确引入Kotlinx序列化的插件和依赖

疑问解答

  • 类型转换器本身是可以支撑该场景的,你已经在ForecastDatabase上正确添加了@TypeConverters(Converters::class)注解,配置没有问题,问题出在转换器内部的实现逻辑
  • 只有当你使用Kotlinx序列化库做解析时才需要给Weather类定义序列化方法,使用Gson的场景下不需要额外添加注解,因为Gson是基于反射实现解析的。

内容的提问来源于stack exchange,提问作者Stelios Papamichail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 08:48:03