如何创建通用模型 class 以使用 retorfit2 解析 Json?
How to create universal model class for parsing Json with retorfit2?
所有 API 响应 json 构造器如下:
{
“数据”:{
...
},
“元”:{
...
}
}
但是所有 API 在 data 和 meta 中都有不同的嵌套 json。我需要制作通用父 json 模型 class。这是我的情况:
class FirstJsonModel{
@SerializedName("data")
var data: FirstData? = null
@SerializedName("meta")
var meta: FirstMeta? = null
}
class FirstData {
}
class FirstMeta {
}
class SecondJsonModel {
@SerializedName("data")
var data: SecondData? = null
@SerializedName("meta")
var meta: SecondMeta? = null
}
class SecondData {
}
class SecondMeta {
}
考虑到您共享的代码,您可以使用通用 class 来实现此目的 -
class ApiResponseModel<T> {
@SerializedName("data")
var data: T? = null
}
或
class ApiResponseModel<T1, T2> {
@SerializedName("data")
var data: T1? = null
@SerializedName("meta")
var meta: T2? = null
}
如果你想使用 is for Data 类 你可以这样做 -
data class ApiResponseModel<T1, T2> (
@SerializedName("data")
var data: T1? = null,
@SerializedName("meta")
var meta: T2? = null
)
希望对您有所帮助!
使用通用 class
data class Hello<D,M>(
@SerializedName("data")
var data: D? = null,
@SerializedName("meta")
var meta: M? = null
)
所有 API 响应 json 构造器如下: { “数据”:{ ... }, “元”:{ ... } }
但是所有 API 在 data 和 meta 中都有不同的嵌套 json。我需要制作通用父 json 模型 class。这是我的情况:
class FirstJsonModel{
@SerializedName("data")
var data: FirstData? = null
@SerializedName("meta")
var meta: FirstMeta? = null
}
class FirstData {
}
class FirstMeta {
}
class SecondJsonModel {
@SerializedName("data")
var data: SecondData? = null
@SerializedName("meta")
var meta: SecondMeta? = null
}
class SecondData {
}
class SecondMeta {
}
考虑到您共享的代码,您可以使用通用 class 来实现此目的 -
class ApiResponseModel<T> {
@SerializedName("data")
var data: T? = null
}
或
class ApiResponseModel<T1, T2> {
@SerializedName("data")
var data: T1? = null
@SerializedName("meta")
var meta: T2? = null
}
如果你想使用 is for Data 类 你可以这样做 -
data class ApiResponseModel<T1, T2> (
@SerializedName("data")
var data: T1? = null,
@SerializedName("meta")
var meta: T2? = null
)
希望对您有所帮助!
使用通用 class
data class Hello<D,M>(
@SerializedName("data")
var data: D? = null,
@SerializedName("meta")
var meta: M? = null
)