Существует другой тип данных для «результата», то есть массив, а остальные - объект, поэтому сначала я делаю десериализацию, но я получил нулевые данные для всех свойств JSON после десериализации моего ответа, вот мой код, спасибоВы за любую помощь
Вот для JSON:
{
"header": "200",
"status": "success",
"data": [
{
"id": 1,
...
...
"salary": {
"currency": "SS",
"minimum": "1",
"maximum": "12"
},
"created_at": "aa",
...
...
},
{
"id": 2,
...
...
"salary": [],
"created_at": "ss",
...
...
}
]
}
Вот модель данных:
data class JobsModel(
val data: List<DataJobs>,
val header: String,
val status: String
)
data class DataJobs(
val city: String,
val company_name: String,
val country: String,
val created_at: String,
val description: String,
val id: Int,
val job_title: String,
val job_type: String,
val logo: String,
val requirement: String,
val responsibility: String,
val salary: Salary,
val share_url: String
)
data class Salary(
val currency: String,
val maximum: String,
val minimum: String
)
Вот класс десериализатора
class DataStateDeserializer : JsonDeserializer<JobsModel> {
override fun deserialize(
json: JsonElement?,
typeOfT: Type?,
context: JsonDeserializationContext?
): JobsModel {
val jobsModel = Gson().fromJson(json, JobsModel::class.java)
val jsonObject = json?.asJsonObject
if (jsonObject != null) {
if (jsonObject.has("salary")) {
val element = jsonObject.get("salary")
if (element != null) {
if (element.isJsonPrimitive || element.isJsonArray) {
element.asJsonArray
}
} else {
element?.asJsonArray
jobsModel.header
}
}
}
return jobsModel
}
}
А вот для дооснащения
class ServiceFactory {
private fun retrofit(): Retrofit {
val gson = GsonBuilder()
.registerTypeAdapter(DataJobs::class.java,DataStateDeserializer())
.create()
val okHttpClient = OkHttpClient().newBuilder()
.readTimeout(30, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.callTimeout(30, TimeUnit.SECONDS)
.build()
return Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build()
}
fun instanceServices(): Services {
return retrofit().create(Services::class.java)
}
}