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!


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
)

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.