私がmoshi 1.9.0を使おうとすると下記のようなエラーが出てきました。(xxxxxはパッケージ名とクラス)
Cannot serialize Kotlin type xxxxxx. Reflective serialization of Kotlin classes without using kotlin-reflect has undefined and unexpected behavior. Please use KotlinJsonAdapter from the moshi-kotlin artifact or use code gen from the moshi-kotlin-codegen artifact.
これはmoshi 1.9.0からはkotlin-reflectまたはmoshi-kotlin-codegenを全てのKotlinクラスに利用する必要があるからとのことですので、下記の対処法のどちらかを行いましょう
moshi/CHANGELOG.md at master · square/moshi
A modern JSON library for Kotlin and Java. Contribute to square/moshi development by creating an account on GitHub.
KotlinJsonAdapterFactoryを利用する
Moshiのインスタンスを作成するときに、下記のように.add()を追加して、Kotlin用のアダプターを追加しましょう。
Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
codegenアノテーションプロセッサを利用する
data classなどに下記のアノテーションを追加しましょう。
@JsonClass(generateAdapter = true)
data class Sample(
val hoge: Hoge,
val fuga: Fuga
)
余談
1.9.0以上の変更については、以前はMoshiはKotlinとjavaを区別していなかったようなのですが、nullをNonNullのフィールドに入れてしまうなどの悪影響が大きかったため、このような修正に至ったようです。
コメント