android - kotlin 中的多类型对象
问题描述
从 API 调用中,我得到一个具有这种结构的主体作为响应
open class BaseResponseEntity {
@SerializedName("result")
val result: ResultEnum = ResultEnum.NONE
@SerializedName("errorCode")
val errorCode: String = ""
@SerializedName("errorMessage")
val errorMessage: String = ""
@SerializedName("successMessage")
val successMessage: String = ""
@SerializedName("value")
val code: LastPaymentCodeModel?
}
其中“value”字段可以是三种类型:null、String 或 LastPaymentCodeModel。我怎样才能得到这个?我设法放了一个?以便处理 null 和 LastPaymentCodeModel ,但我也不知道如何处理 String 类型。
解决方案
我认为最好的方法可能是使用 type Any?
for code
。然后你应该为对象编写一个自定义的 GSon 序列化器/反序列化器 ( JsonDeserializer<BaseResponseEntity>
) BaseResponseEntity
。
在这个 Json 反序列化器中,您需要检查类型value
(例如,它是字符串还是数据结构)并将其解码为正确的对象类型。
或者,为了避免使用Any?
,您可以完全保留模型。您仍然需要编写一个 custom JsonDeserializer
,但是如果value
是一个字符串,那么它仍然会创建一个LastPaymentCodeModel
,使用字符串值作为它的属性之一。
推荐阅读
- ios - Xcode 和 swift 加载默认相机视图
- reactjs - MenuBar 中 menuItem 的 React Animation 不起作用
- javascript - 如何使 HTML 按钮连接到 HTML5 Canvas 的 Javascript 函数以使 Spaceship Fire
- spring-boot - Cloud Run:部署 spring docker 镜像导致错误;无法启动并监听 PORT 环境变量定义的端口
- jwt - 保护 webapi 的 Identityserver4 不起作用
- php - 您的文件超过了该网站的最大上传大小:64MB。当我将我的网站本地主机上传到实时服务器时,我会向我展示
- amazon-web-services - AWS 托管服务中的 Apache Storm 替代方案是什么?
- java - Java - 通过使用文件中的数据构建不同类型的对象来填充列表
- azure - 用户授权密钥与帐户密钥 - 安全性?
- php - 无法打开文件“app/tests/php/Test.php”