最新版本的kotlinx.serialization 有很好的文档https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serializers.md#custom-serializers
但是,问题中没有PrimitiveSerialDescriptor
类,这意味着使用了一些旧版本的kotlinx.serialization。
从https://github.com/Kotlin/kotlinx.serialization/releases可以发现在1.0.0-RC版本中
PrimitiveDescriptor
改名为PrimitiveSerialDescriptor
和
@Serializable
带有注释和Json
格式的核心工件的 id从kotlinx-serialization-runtime
更改kotlinx-serialization-core
为更清晰,并与其他 kotlinx 库保持一致。
接下来,这里是kotlinx.serialization版本0.20.0的代码示例:
object DateSerializer : KSerializer<Date> {
override val descriptor = PrimitiveDescriptor("Date", PrimitiveKind.LONG)
override fun serialize(encoder: Encoder, value: Date) = encoder.encodeLong(value.time)
override fun deserialize(decoder: Decoder): Date = Date(decoder.decodeLong())
}
@Serializable
data class MyDto(
@Serializable(DateSerializer::class)
val date: Date
)
fun main() {
val dto = Json.parse(MyDto.serializer(), """{ "date" : 1630407000000 }""")
println(dto.date)
}
和build.gradle.kts
plugins {
kotlin("jvm") version "1.3.72"
kotlin("plugin.serialization") version "1.3.72"
}
repositories { mavenCentral() }
dependencies {
implementation("org.jetbrains.kotlinx", "kotlinx-serialization-runtime", "0.20.0")
}