質問クラスが次のような質問の配列リストをエンコードしようとしています。
import kotlinx.serialization.Serializable
@Serializable
data class Question(var id: Int?, var question: String, var
answers:ArrayList<Answer>)
Answer クラスは次のようになります。
import kotlinx.serialization.Serializable
@Serializable
data class Answer(var id:Int?, var answer: String, var rightAnswer: Boolean)
そして、これは配列リストをエンコードしようとしているコードです:
val questionsJSON = Json.encodeToString(quiz.questions)
このコードにより、次のエラーが発生します。
Caused by:
kotlinx.serialization.SerializationException: Serializer for class 'Question' is not found.
Mark the class as @Serializable or provide the serializer explicitly.
プラグインの適用方法がわからないため、kotlinx-serialization ライブラリを取得するために行った唯一のことは、build.cradle に依存関係を追加したことです。
//Kotlin serialization
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2")
アップデート:
build.cradle と proguard-rules.pro に以下を追加しようとしましたが、同じエラーが発生し続けます。
build.cradle
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'org.jetbrains.kotlin.plugin.serialization' version '1.5.20'
}
proguard-rules.pro
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt # core
serialization annotations
# kotlinx-serialization-json specific. Add this if you have
java.lang.NoClassDefFoundError
kotlinx.serialization.json.JsonObjectSerializer
-keepclassmembers class kotlinx.serialization.json.** {
*** Companion;
}
-keepclasseswithmembers class kotlinx.serialization.json.** {
kotlinx.serialization.KSerializer serializer(...);
}
# Change here com.yourcompany.yourpackage
-keep,includedescriptorclasses class
eu.lucasblommers.quizapp.**$$serializer { *; } # <-- change package name to your app's
-keepclassmembers class eu.lucasblommers.quizapp.** { # <-- change package name to your app's
*** Companion;
}
-keepclasseswithmembers class eu.lucasblommers.quizapp.** { # <-- change package name to your app's
kotlinx.serialization.KSerializer serializer(...);
}