我有这个 json:
{
"name": "Hungarian Translation",
"language": "hu",
"created_at": 1676618826043,
}
并想将其转换为 Kotlin 数据类:
data class TranslationBook(
val name: String,
val language: String,
val created_at: Long,
val createdAt: ZonedDateTime? =
ZonedDateTime.ofInstant(Instant.ofEpochMilli(created_at), ZoneId.of("Asia/Jakarta")),
) : Parcelable
那是我想将 created_at 时间戳保存为 createdAt 属性中的 ZonedDateTime。但是,createdAt 属性始终为空。我错过了什么?
createdAt
属性可能设置为 null,因为您正在将 JSON 反序列化为此类,反序列化器无法在 JSON 中找到“createdAt”键,因此它只是将 null 传递给构造函数。
如果你只是想创建一个从另一个属性计算的属性,你可以写一个 getter:
val creationZonedDateTime: ZonedDateTime
get() = ZonedDateTime.ofInstant(Instant.ofEpochMilli(created_at), ZoneId.of("Asia/Jakarta"))
请注意,我已将新属性命名为
creationZonedDateTime
,使其与created_at
相比更具特色。我还建议重命名 created_at
以使用驼峰大小写,以保持一致。当然,这需要您以一种或另一种方式指定其 JSON 键名,具体取决于您使用的库。
由于 getter 会在您每次访问该属性时创建一个新的
ZonedDateTime
,因此您也可以使其延迟计算:
val creationZonedDateTime: ZonedDateTime by lazy {
ZonedDateTime.ofInstant(Instant.ofEpochMilli(created_at), ZoneId.of("Asia/Jakarta"))
}