У меня есть рабочий код сериализации / десериализации данных с помощью Moshi 1.8.0
Обновление до 1.9.1 теперь приводит к сбою при попытке сериализации:
java.lang.IllegalArgumentException: невозможно сериализовать тип Kotlin com.xxx.Spot. Рефлексивная сериализация классов Kotlin без использования kotlin-рефлекса имеет неопределенное и неожиданное поведение. Пожалуйста, используйте KotlinJsonAdapter из артефакта moshi-kotlin или используйте code gen из артефакта 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) перед вашим классом данных
источник
Вы можете подавить подстановочные знаки, используя
@JvmSuppressWildcards
.нравится
источник