0

質問クラスが次のような質問の配列リストをエンコードしようとしています。

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(...);
}
4

0 に答える 0