我正在尝试解析主要是这样构造的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
在每个孩子班级。只是对此感到好奇。预先感谢您的任何想法。
答案 0 :(得分:1)
诸如SerializedData
之类的注释要求其参数为编译时常量。看看Kotlin中的“编译时常数”意味着什么:
可以使用const修饰符将其值在编译时已知的属性标记为编译时常量。这些属性需要满足以下要求:
- 对象的顶级或成员
- 初始化为String类型或原始类型的值
- 没有自定义获取器
此类属性可用于注释:
const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated" @Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... }
我相信您的用例不能满足“对象的顶级或成员”的第一个要求。