android - Moshi 1.9.1 无法序列化 Kotlin 类型
问题描述
我有一个使用 Moshi 1.8.0 序列化/反序列化数据的工作代码
现在升级到 1.9.1 会在尝试序列化时导致崩溃:
java.lang.IllegalArgumentException:无法序列化 Kotlin 类型 com.xxx.Spot。不使用 kotlin-reflect 的 Kotlin 类的反射序列化具有未定义和意外的行为。请使用来自 moshi-kotlin 工件的 KotlinJsonAdapter 或使用来自 moshi-kotlin-codegen 工件的代码生成器。
这是序列化程序代码:
val moshi = Moshi.Builder().build()
val dataListType = newParameterizedType(List::class.java, T::class.java)
val adapter: JsonAdapter<List<T>> = moshi.adapter(dataListType)
val json = adapter.toJson(dataList)
对应的T类是
@IgnoreExtraProperties
data class Spot(
var id: String = "",
var localizedName: String? = null,
var type: String = "",
var location: Location? = null
)
我完全不知道在这里做什么。
谢谢您的帮助!
解决方案
您需要在数据类之前添加 @JsonClass(generateAdapter = true)
@JsonClass(generateAdapter = true)
data class Spot(
var id: String = "",
var localizedName: String? = null,
var type: String = "",
var location: Location? = null
)
推荐阅读
- c# - 使用 MIP SDK 从 MS 365 个人帐户中解密加密的 Office 365 电子邮件
- fft - 使用 sympy 的框函数的傅里叶级数
- reactjs - 在 Heroku 托管的我的 React 应用程序中,反应浏览器路由器可以成功引导确切的路由,但找不到动态路由
- reactjs - 如何从 Reactjs 中的 proptypes 抛出错误而不是警告?
- terraform - Terraform - AKS 私有云 | 无限等待掌舵释放
- javascript - @click 调用在 vue.js 中不起作用的方法
- ssl - 如何在 GCP 中激活 SSL 证书。?
- javascript - 如何替换 AdjacentHTML 而不是创建另一个 AdjacentHTML 实例
- python - ValueError :当数组长度与索引长度不匹配时。如何调试这个?
- c# - 结构字段的加载值指令与加载地址指令的效率