首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlinx.Serialization反序列化日期

Kotlinx.Serialization反序列化日期
EN

Stack Overflow用户
提问于 2021-04-28 18:21:47
回答 2查看 5.5K关注 0票数 2

我很难找到关于如何反序列化日期字段的文档。我怎样才能做到这一点?我在上面找到的大多数解决方案都不起作用,或者它们使用的类不再可用

代码语言:javascript
复制
@Serializable
data class Dashboard(
    val someNumber: Int,
    val someDate: Date? // Custom Deserialization from unix timestamp
)

编辑:我找到的大多数解决方案都使用似乎不可用的PrimitiveSerialDescriptor

EN

回答 2

Stack Overflow用户

发布于 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的代码示例

代码语言:javascript
复制
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

代码语言:javascript
复制
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")
}
票数 6
EN

Stack Overflow用户

发布于 2022-02-06 11:13:27

不要使用日期,而是使用InstantLocalDateTime,您需要将其添加到build.gradle文件中。

代码语言:javascript
复制
implementation "org.jetbrains.kotlinx:kotlinx-datetime:0.3.2"

在以下链接中了解更多有关它的信息:https://github.com/Kotlin/kotlinx-datetime

这将自动序列化,并在KMM中工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67305843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档