19

我有以下数据类

@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

4

2 回答 2

27

除了kotlinx-serialization-runtime依赖,你还需要添加插件

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

与 Kotlin 本身的版本相同。

于 2020-02-29T17:13:12.397 回答
3

我有一个类似的问题,我的 Navigation Drawer XML 文件无法识别我的可序列化类,因为我必须扩展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
于 2021-02-09T13:23:32.667 回答