Moshi 1.9.1 Kotlin tipi seri hale getirilemiyor


12

Moshi 1.8.0 kullanarak verileri serileştirme / serileştirme çalışma kodum var

1.9.1 sürümüne yükseltme artık serileştirmeye çalışırken çökmeye neden oluyor:

java.lang.IllegalArgumentException: Kotlin türü com.xxx.Spot'u serileştiremiyor. Kotlin-refl kullanmadan Kotlin sınıflarının yansıtıcı serileştirmesi tanımsız ve beklenmedik davranışlara sahiptir. Lütfen moshi-kotlin artefaktından KotlinJsonAdapter kullanın veya moshi-kotlin-codegen artefaktından kod genini kullanın.

Seri numarası kodu:

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)

ve karşılık gelen T sınıfı

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

Burada ne yapacağım konusunda tamamen bilgim yok.

Yardım için teşekkürler!


Yanıtlar:


14

Veri sınıfınızdan önce @JsonClass (createAdapter = true) eklemeniz gerekir

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

2
Neden gerekli?
Morten Holmgaard

5
... ve yapınıza ilgili kapt yapılandırmasını ekleyin. Ayrıntılar burada: github.com/square/moshi/blob/master/README.md#kotlin
Jesse Wilson

1
Teşekkürler, işe yaradı! @JsonClass (createAdapter = true) ekleme + sınıflandırma uygulamasını 'moshi' den 'moshi-kotlin' olarak değiştirme + kapt hile yaptı
lorenzo

0

Tuşlarını kullanarak jokerleri bastırabilirsiniz @JvmSuppressWildcards.

bunun gibi

val adapter: JsonAdapter<List<@JvmSuppressWildcards T>> = moshi.adapter(dataListType)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.