在数据类 Kotlin 中反序列化 Duration 成员

问题描述 投票:0回答:1

我有一个如下所示的数据类,其中有一个类型为 Duration:

的成员
@Serializable
data class DataClass(
    val fieldOne: Long,
    val fieldTwo: String,
    val fieldThree: Duration,
) {
    constructor() : this(0, "", Duration.ZERO, "")
}

我正在使用 Firebase 实时数据库来存储此 DataClass,并且在反序列化 DataClass 对象时遇到问题。

我发现,即使 fieldThree 中保存的值已正确存储在 Firebase 实时数据库中,但在应用程序中对其进行反序列化时,该值为零 (0)。

发生这种情况是因为默认构造函数到位,我不明白为什么。

我需要默认构造函数,否则我在反序列化时会收到错误,指出 DataClass 中缺少默认构造函数。

我知道我需要 Kotlin 1.7.20 才能序列化 Duration 对象(参考此处),并在我的应用程序中这样做了。我还尝试实现上面参考中建议的自定义序列化器。

无论值如何,所有其他字段都会正确反序列化。

DataClass 实例化的示例可以是:

DataClass(12345, "", Duration.hours(1))

我在这里做错了什么?

kotlin firebase-realtime-database deserialization duration
1个回答
1
投票

Firebase 实时数据库只能存储 JSON 值。

Kotlin

Duration
不是已知的 JSON 类型,在 SDK 上进行快速代码搜索 不会显示对该类型的任何特殊处理。

为了在 Firebase 实时数据库中存储持续时间,您必须将其保留为数据类中受支持的 JSON 类型,或者自行处理转换。

© www.soinside.com 2019 - 2024. All rights reserved.