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

Kotlin中Gson不支持MutableLiveData<model>反序列化致类型转换异常

错误原因
  • MutableLiveData<T>是Jetpack提供的生命周期感知型数据容器类,本身和你定义的photosModel业务实体类不存在继承关系
  • 调用Gson的fromJson方法时指定的目标类型是photosModel::class.java,反序列化得到的结果只会是photosModel类型的实例,直接强转为MutableLiveData<photosModel>不符合Java/Kotlin的类型转换规则,因此抛出类型转换异常
最简解决方案

这是最常用、侵入性最低的修复方式,不需要修改Gson配置也不需要自定义适配器:

  1. 定义变量时直接初始化MutableLiveData实例,避免使用lateinit降低空风险:
// 注意:Kotlin类名建议遵循大驼峰命名规范,photosModel建议改为PhotosModel
val _photosModel = MutableLiveData<photosModel>()
  1. 反序列化拿到业务实体实例后,调用MutableLiveData的赋值方法将实例传入即可:
val gson = Gson()
// 直接指定反序列化目标类型为photosModel,不需要转Any
val modelObj = gson.fromJson(response.toString(), photosModel::class.java)
// 主线程赋值用value,子线程赋值用postValue
_photosModel.value = modelObj
可选方案:自定义Gson TypeAdapter

如果你确实需要让Gson直接反序列化出MutableLiveData<T>类型的实例,可以自定义TypeAdapter实现,但通常不推荐这么做,会增加不必要的序列化/反序列化复杂度:

  • 自定义适配MutableLiveData的TypeAdapter,在反序列化逻辑中先解析出泛型对应的实体类实例,再手动封装进MutableLiveData实例返回
  • 构建Gson实例时将自定义TypeAdapter注册到Gson实例中即可使用

内容的提问来源于stack exchange,提问作者Osama Ibrahim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:54:02