ary*_*axt 8 kotlin kotlinx.serialization kotlinx
我很难找到有关如何反序列化日期字段的文档。我该如何实现这一目标?我在 SO 上找到的大多数解决方案都不起作用,或者它们使用不再可用的类
@Serializable
data class Dashboard(
val someNumber: Int,
val someDate: Date? // Custom Deserialization from unix timestamp
)
Run Code Online (Sandbox Code Playgroud)
编辑:我发现使用的大多数解决方案PrimitiveSerialDescriptor似乎不可用
小智 13
不要使用 Date,而是使用Instant或LocalDateTime,您需要将其添加到 build.gradle 文件中
implementation "org.jetbrains.kotlinx:kotlinx-datetime:0.3.2"
Run Code Online (Sandbox Code Playgroud)
在此链接中阅读更多相关信息: https ://github.com/Kotlin/kotlinx-datetime
这将自动序列化并且也适用于 KMM
Ale*_*nov 10
对于最新版本的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具有注释和格式的核心工件的 idJson已从 更改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)
}
Run Code Online (Sandbox Code Playgroud)
和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")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15107 次 |
| 最近记录: |