Мне нужно реализовать собственный десериализатор GSON (с Retrofit2) для моего приложения Android в kotlin.Вот как пример того, как API дает мне результат:
example1:
{
"res": {
"status": {
"code": 0,
"message": "some message",
}
},
"somedata": {
"someid" = "12345",
"sometext" = "a text"
}
}
example2:
{
"res": {
"status": {
"code": 0,
"message": "another message",
}
},
"anotherdata": {
"anotherid" = "54321",
"anothertext" = "b text"
}
}
это относительные классы kotlin для отображения данных (ябудет использовать десериализатор для извлечения данных внутри объекта "res"):
abstract class GenericResponse() {
//abstract class for common fields
constructor(status: Status?) : this()
}
class Status(
val code: Int,
val message: String
)
, и это конкретные классы ответа:
data class SomeData(
val status: Status,
val someid : String,
val sometext : String
): GenericResponse(status)
data class AnotherData(
val status: Status,
val anotherid : String,
val anothertext : String
): GenericResponse(status)
Я попытался создать собственный класс десериализатора, который реализуетJsonDeserializer, что-то вроде:
class CustomDeserializer : JsonDeserializer<GenericResponse> {
override fun deserialize(
json: JsonElement?,
typeOfT: Type?,
context: JsonDeserializationContext?
): GenericResponse {
val rootElement = json!!.asJsonObject.getAsJsonObject("res")
//further implementation, should return SomeData or AnotherData object
}
, но это не работает.Как я могу это сделать?