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
)
ここで何をすればいいのか全く分かりません。
助けてくれてありがとう!
@JvmSuppressWildcards
を使用してワイルドカードを抑制できます。
このような
val adapter: JsonAdapter<List<@JvmSuppressWildcards T>> = moshi.adapter(dataListType)