基于 Enum 属性反序列化 Kotlin 对象

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

我正在开发一个 Android 应用程序,我从具有两个属性的 API 获取一些数据 - 一个是描述数据的枚举,另一个是值。我遇到的问题是该值可以是不同的类型,具体取决于它对应的枚举。 API 返回如下所示的 JSON:

[ {type: name, value: "bob"}, {type: height, value: 70}, {type: weight, value: 160.25}, {type: metric, value: false} ]

所以我有一个看起来像这样的数据对象:

data class Info(val type: InfoType, val value: (Not sure what to do here))

其中

InfoType
是一个枚举,看起来像:

enum class InfoType { NAME, HEIGHT, WEIGHT, METRIC }

我该如何处理这些数据?有没有办法根据

value
的内容设置
InfoType
数据类型?

android kotlin kotlinx.serialization
1个回答
0
投票

Info 不应该是数据类。 应该是密封接口。

sealed interface Info {
  data class NameInfo(val name: String): Info
  data class HeightInfo(val height: Int): Info
  ...
}

您不需要保留类型,因为该类型由您使用的子类型保存。 如果您需要一个接受其中任何一个的变量,请使用 Info. 反序列化时,根据值选择要实例化的子类型。

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