我收到类似的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、WATER、CYPO、UNKNOWN(,我知道它们都会返回相同的值,例如FIRE总是会返回food
和water
,这对你们有帮助吗?
是的,您可以创建一个数据类来表示这个JSON。由于字段的名称不变,您可以将它们全部包括在内,并将它们标记为可为null。
我想您可以创建一个包含所有可能字段的数据类,并相应地使用这些字段。我的意思是:
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结构可能没有得到很好的优化。(我可能错了,我不是这方面的专家(
如果可以为null则使用以下DTO
data class AnimalResponse(
val type: String?,
val food : String?,
val water : String?,
val counter : Integer?
)