web-dev-qa-db-ja.com

Moshi 1.9.1 Kotlinタイプをシリアル化できません

Moshi 1.8.0を使用してデータをシリアライズ/デシリアライズする作業コードがあります

1.9.1にアップグレードすると、シリアライズしようとするとクラッシュするようになりました。

Java.lang.IllegalArgumentException:Kotlinタイプcom.xxx.Spotをシリアル化できません。 kotlin-reflectを使用しないKotlinクラスのリフレクトシリアライズには、未定義の予期しない動作があります。 moshi-kotlinアーティファクトのKotlinJsonAdapterを使用するか、moshi-kotlin-codegenアーティファクトのコードgenを使用してください。

シリアライザのコードは次のとおりです。

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
)

ここで何をすればいいのか全く分かりません。

助けてくれてありがとう!

12
lorenzo

@JvmSuppressWildcardsを使用してワイルドカードを抑制できます。

このような

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