Моши 1.9.1 не может сериализовать котлинский тип - PullRequest
4 голосов
/ 01 ноября 2019

У меня есть рабочий код для сериализации / десериализации данных с использованием Moshi 1.8.0

Обновление до 1.9.1 теперь приводит к сбою при попытке сериализации:

java.lang.IllegalArgumentException: Невозможно сериализовать тип Kotlin com.xxx.Spot. Рефлексивная сериализация классов Kotlin без использования kotlin-рефлекса имеет неопределенное и неожиданное поведение. Пожалуйста, используйте KotlinJsonAdapter из артефакта moshi-kotlin или используйте код 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
)

Я совершенно не знаю, что здесь делать.

Спасибо за помощь!

1 Ответ

6 голосов
/ 01 ноября 2019

Вам необходимо добавить @JsonClass (generateAdapter = true) перед вашим классом данных

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