Moshi 1.9.1 Tidak bisa membuat serial jenis Kotlin

12

Saya memiliki kode serialisasi / deserializing data yang berfungsi menggunakan Moshi 1.8.0

Memutakhirkan ke 1.9.1 sekarang menyebabkan kerusakan saat mencoba membuat cerita bersambung:

java.lang.IllegalArgumentException: Tidak dapat membuat serialisasi jenis Kotlin com.xxx.Spot. Serialisasi reflektif dari kelas-kelas Kotlin tanpa menggunakan kotlin-reflect memiliki perilaku yang tidak jelas dan tidak terduga. Silakan gunakan KotlinJsonAdapter dari artefak moshi-kotlin atau gunakan kode gen dari artefak moshi-kotlin-codegen.

Ini adalah kode serializer:

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)

dan kelas T yang sesuai adalah

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

Saya sama sekali tidak tahu apa yang harus dilakukan di sini.

Terima kasih untuk bantuannya!

Lorenzo
sumber
perlihatkan kepada kami dependensi yang Anda gunakan
coroutineDispatcher

Jawaban:

14

Anda perlu menambahkan @JsonClass (menghasilkanAdapter = true) sebelum kelas data Anda

@JsonClass(generateAdapter = true) 
data class Spot(
    var id: String = "",
    var localizedName: String? = null,
    var type: String = "",
    var location: Location? = null
)
Olle Ekberg
sumber
2
Mengapa itu dibutuhkan?
Morten Holmgaard
5
... dan sertakan konfigurasi kapt yang sesuai di build Anda. Detail di sini: github.com/square/moshi/blob/master/README.md#kotlin
Jesse Wilson
1
Terima kasih, itu berhasil! Menambahkan @JsonClass (generateAdapter = true) + mengubah implementasi gradle dari 'moshi' menjadi 'moshi-kotlin' + kapt melakukan trik
lorenzo
0

Anda dapat menekan kartu liar menggunakan @JvmSuppressWildcards.

seperti ini

val adapter: JsonAdapter<List<@JvmSuppressWildcards T>> = moshi.adapter(dataListType)
Khaled Qasem
sumber