我正在接收这样的json
{
"animal" : {
"type" : "FIRE",
"food" : "potato",
"water": "7up"
}
}
---
{
"animal" : {
"type" : "WATER",
"water": "7up"
}
}
---
{
"animal" : {
"type" : "CYPO",
"counter": 7
}
}
---
{
"animal" : {
"type" : "UNKNOWN",
"food": "Stup",
"water": "Cola",
"counter" : 4
}
}
我是否打算创建4个数据类?我的意思是,我知道它们的外观,它们不会改变,但是取决于类型是否包含一些参数,所以我必须创建4个数据类,例如FIRE类>
data class AnimalFireResponse{
@SerializedName("type") val myEnum: MyEnum, @SerializedName("food") val food : String, @SerializedName("water") val water : String)
}
但是后来我不知道要添加什么服务
@GET("/dynamic/stuff.php")
fun getAnimal(): Call<List<MyResponseWithDynamicAnimal>>
还有其他通用方法吗?
也许有帮助,但是,我知道所有type
值(FIRE,WAITER,CYPO,UNKNOWN),而且我知道所有这些值都将返回相同的值,例如FIRE将始终返回{ {1}}和food
,对您有帮助吗?
答案 0 :(得分:0)
是的,您可以创建一个数据类来表示此JSON。 由于字段名称不变,因此您可以全部包含它们并将其标记为可空。
答案 1 :(得分:0)
我想您可以使用所有可能的字段创建1个数据类,并相应地使用这些字段。我的意思是:
data class AnimalResponse{
@SerializedName("type") val myEnum: MyEnum,
@SerializedName("food") val food : String= "",
@SerializedName("water") val water : String= "",
@SerializedName("counter") val counter : Integer = -1)
}
如果您的响应不包含字段,则会使用默认值初始化该字段,您可以在代码中检入。但是,我觉得API结构可能没有得到很好的优化。(我可能是错的,我不是专家)
答案 2 :(得分:0)
如果可以为空,则使用以下DTO
data class AnimalResponse(
val type: String?,
val food : String?,
val water : String?,
val counter : Integer?
)