Класс kotlinx-serialization, помеченный @Serializable, не имеет функции расширения .serializer (). - PullRequest
3 голосов
/ 29 февраля 2020

У меня есть следующий класс данных

@Serializable
data class Income(val id: String, 
                  val description: String, 
                  val amount: Int, 
                  val Time: Date, 
                  val userId: String)

Теперь, когда я пытаюсь использовать функцию .serializer (), он говорит, что .serializer () не определен для класса Income, поэтому мой проект не compile.

    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

1 Ответ

1 голос
/ 29 февраля 2020

В дополнение к зависимости kotlinx-serialization-runtime вам также необходимо добавить плагин

plugins {
    kotlin("multiplatform") // or kotlin("jvm") or any other kotlin plugin
    kotlin("plugin.serialization") version "1.3.61"
}

с той же версией, что и у Kotlin.

...