首页 > 解决方案 > 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
)

我完全不知道在这里做什么。

谢谢您的帮助!

标签: androidkotlinmoshi

解决方案


您需要在数据类之前添加 @JsonClass(generateAdapter = true)

@JsonClass(generateAdapter = true) 
data class Spot(
    var id: String = "",
    var localizedName: String? = null,
    var type: String = "",
    var location: Location? = null
)

推荐阅读