从Kotlin的子类获取SerializedName参数

时间:2018-06-27 19:04:26

标签: json kotlin gson

我正在尝试解析主要是这样构造的API响应:

{
    "ApiFunc1":{
        "SomeData1":"SomeValue1",
        "SomeData2":"SomeValue2",
        "SomeData3":"SomeValue3"
    }
}


{
    "ApiFunc2":{
        "SomeData4":"SomeValue4",
        "SomeData5":"SomeValue5",
        "SomeData6":"SomeValue6"
    }
}
.
.
.

我创建了一个基类,如下所示:

class Model_BaseResponse<TResponse> : Serializable {

    @SerializedName("ErrorMessage")
    var errorMessage: String? = null

    @SerializedName("value")
    var data: TResponse? = null

}

每个ApiFunc返回不同的数据。我想创建一个基类,可以在子类中设置data: TResponse的@SerializedName(“ ApiFunc1”)或@SerializedName(“ ApiFunc2”)。有什么办法吗?我以常规方式进行操作,定义了

@SerializedName("value")
var data: TResponse? = null

在每个孩子班级。只是对此感到好奇。预先感谢您的任何想法。

1 个答案:

答案 0 :(得分:1)

诸如SerializedData之类的注释要求其参数为编译时常量。看看Kotlin中的“编译时常数”意味着什么:

  

可以使用const修饰符将其值在编译时已知的属性标记为编译时常量。这些属性需要满足以下要求:

     
      
  • 对象的顶级或成员
  •   
  • 初始化为String类型或原始类型的值
  •   
  • 没有自定义获取器
  •   
     

此类属性可用于注释:

const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated"

@Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... }

我相信您的用例不能满足“对象的顶级或成员”的第一个要求。