Класс kotlinx-сериализации с пометкой @Serializable не имеет функции расширения .serializer()
У меня есть следующий класс данных
@Serializable
data class Income(val id: String,
val description: String,
val amount: Int,
val Time: Date,
val userId: String)
теперь, когда я пытаюсь использовать функцию.serializer(), он говорит, что.serializer() не определен для класса Income, поэтому мой проект не компилируется.
val response = Json.stringify(Income.serializer(), Incomes)
call.respond(HttpStatusCode.OK,response)
Я дважды просмотрел документацию на readme.md. Даже смотрел анонсирующий ролик с KotlinConf
У кого-нибудь была такая же проблема. Что я делаю неправильно??
Редактировать:
Я попытался просто скопировать и вставить образцы с readme.md и столкнулся с той же проблемой.
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class Data(val a: Int, val b: String = "42")
fun main() {
// Json also has .Default configuration which provides more reasonable settings,
// but is subject to change in future versions
val json = Json(JsonConfiguration.Stable)
// serializing objects
val jsonData = json.stringify(Data.serializer(), Data(42))
// serializing lists
val jsonList = json.stringify(Data.serializer().list, listOf(Data(42)))
println(jsonData) // {"a": 42, "b": "42"}
println(jsonList) // [{"a": 42, "b": "42"}]
// parsing data back
val obj = json.parse(Data.serializer(), """{"a":42}""") // b is optional since it has default value
println(obj) // Data(a=42, b="42")
}
Это также не компилируется в моем коде. В настоящее время я использую Kotlin 1.3..61 и kotlinx-serialization-runtime 0.14.0
2 ответа
В добавок к kotlinx-serialization-runtime
зависимости вам также необходимо добавить плагин
plugins {
kotlin("multiplatform") // or kotlin("jvm") or any other kotlin plugin
kotlin("plugin.serialization") version "1.3.61"
}
с той же версией, что и сам Котлин.
У меня была аналогичная проблема, что мой XML-файл Navigation Drawer не распознал мой сериализуемый класс, для этого мне пришлось самому расширить java.io.Serializable, бит для kotlin, это было нормально:
@Serializable
data class Income(val id: String,
val description: String,
val amount: Int,
val Time: Date,
val userId: String) : java.io.Serializable