首页 > 解决方案 > 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 类型。

标签: androidkotlin

解决方案


我认为最好的方法可能是使用 type Any?for code。然后你应该为对象编写一个自定义的 GSon 序列化器/反序列化器 ( JsonDeserializer<BaseResponseEntity>) BaseResponseEntity

在这个 Json 反序列化器中,您需要检查类型value(例如,它是字符串还是数据结构)并将其解码为正确的对象类型。

或者,为了避免使用Any?,您可以完全保留模型。您仍然需要编写一个 custom JsonDeserializer,但是如果value是一个字符串,那么它仍然会创建一个LastPaymentCodeModel,使用字符串值作为它的属性之一。


推荐阅读