Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用kotlinx序列化使用open val序列化kotlin密封类_Kotlin_Serialization_Kotlinx.serialization - Fatal编程技术网

如何使用kotlinx序列化使用open val序列化kotlin密封类

如何使用kotlinx序列化使用open val序列化kotlin密封类,kotlin,serialization,kotlinx.serialization,Kotlin,Serialization,Kotlinx.serialization,我的代码中有这样一个密封类,编译器告诉我: 可序列化类在类本身或其超类型中具有重复的属性“id”序列名 有没有办法让可序列化密封类中的open val在重写它时正常工作?这是。这似乎是一个极端的例子 它可以通过使用以下实现来解决 import kotlinx.serialization.Serializable @Serializable sealed class Exercise(open val id: String) { @Serializable data class

我的代码中有这样一个密封类,编译器告诉我:
可序列化类在类本身或其超类型中具有重复的属性“id”序列名

有没有办法让可序列化密封类中的open val在重写它时正常工作?

这是。这似乎是一个极端的例子

它可以通过使用以下实现来解决

import kotlinx.serialization.Serializable

@Serializable
sealed class Exercise(open val id: String) {

    @Serializable
    data class Theory(override val id: String) : Exercise(id)
}

有关详细信息,请参阅Kotlin序列化指南。

您是否尝试过:
数据类理论(id:String):练习(id)
?我不能对数据类这样做(因为构造函数必须只有属性(val/var)参数),但即使我使用
类理论(id:String):练习(id)
,我有一个错误:
这个类不能自动序列化,因为它的主构造函数参数不是属性
import kotlinx.serialization.*
import kotlinx.serialization.json.Json

@Serializable
sealed class Exercise {
    abstract val id: String

    @Serializable
    data class Theory(override val id: String) : Exercise()
}

fun main() {
    val t1 = Exercise.Theory("t1")
    val t1Json = Json.encodeToString(t1)
    println(t1Json)
    println(Json.decodeFromString<Exercise.Theory>(t1Json).toString())
}
{"id":"t1"}
Theory(id=t1)