我很难找到关于如何反序列化日期字段的文档。我怎样才能做到这一点?我在上面找到的大多数解决方案都不起作用,或者它们使用的类不再可用
@Serializable
data class Dashboard(
val someNumber: Int,
val someDate: Date? // Custom Deserialization from unix timestamp
)编辑:我找到的大多数解决方案都使用似乎不可用的PrimitiveSerialDescriptor
发布于 2021-08-31 12:23:19
关于kotlinx.serialization https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serializers.md#custom-serializers的最新版本有很好的文档。
但是,问题中没有PrimitiveSerialDescriptor类,这意味着使用了一些旧版本的PrimitiveSerialDescriptor。
从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")
}发布于 2022-02-06 11:13:27
不要使用日期,而是使用Instant或LocalDateTime,您需要将其添加到build.gradle文件中。
implementation "org.jetbrains.kotlinx:kotlinx-datetime:0.3.2"在以下链接中了解更多有关它的信息:https://github.com/Kotlin/kotlinx-datetime
这将自动序列化,并在KMM中工作。
https://stackoverflow.com/questions/67305843
复制相似问题