Я работаю над обновлением синтаксического анализа ответа API, который использует Serialized Data Class для анализа ответа JSON.Сериализация отлично работает прямо сейчас, но новые данные, которые я пытаюсь проанализировать в классе данных, не полностью зависят от данных в json.Вот что я имею в виду:
Класс данных - Career
, и новые данные, которые мне нужно проанализировать, - это набор skills
, и у каждого есть rating
.Данные json очень просты и содержат навыки как таковые:
{
// other career data
...
"mathematics_skill": 8,
"critical_thinking_skill": 6
... // the remaining skills
}
Используя прямую сериализацию, я смогу хранить данные только так:
data class Career(
// Other career data
@serializableName("mathematic_skill") val mathSkill: Int,
@serializableName("critical_thinking_skill") val mathSkill: Int,
// remaining skills
)
Однако яхотел бы хранить все навыки в переменной массива пользовательского класса навыков, который содержит не только рейтинг, но также название навыка и цвет.По сути, когда я получаю доступ к данным о квалификации карьеры, я хотел бы получить к ним следующий доступ:
val careerMathSkill = career.skills[0]
val mathRating = careerMathSkill.rating
val mathColor = careerMathSkill.color
Можно ли использовать сериализованные данные из класса данных для добавления несериализованных данных ктот же класс данных?(Извините за странную формулировку, не знаю, как еще это объяснить)
РЕДАКТИРОВАТЬ: Вот что у меня есть:
class CareersRemote(
@SerializedName("careers") val careers: List<Career>
) {
companion object {
fun parseResponse(response: Response<CareersRemote>): CareersResponse {
return if (response.isSuccessful) {
response.body()!!.format()
} else
CareersResponse(listOf(CareersResponse.ErrorType.Generic()))
}
}
fun format(): CareersResponse {
val careers = topCareers.map {
Career(
id = it.id,
title = it.title,
)
}.toMutableList()
return CareersResponse(CareersResponse.SuccessData(careers = careers))
}
data class Career(
@SerializedName("id") val id: String,
@SerializedName("title") val title: String,
)
}
Вот то, что я надеюсь сделать таким образом
class CareersRemote(
@SerializedName("careers") val careers: List<Career>
) {
companion object {
fun parseResponse(response: Response<CareersRemote>): CareersResponse {
return if (response.isSuccessful) {
response.body()!!.format()
} else
CareersResponse(listOf(CareersResponse.ErrorType.Generic()))
}
}
fun format(): CareersResponse {
val careers = topCareers.map {
Career(
id = it.id,
title = it.title,
)
}.toMutableList()
return CareersResponse(CareersResponse.SuccessData(careers = careers))
}
data class Career(
@SerializedName("id") val id: String,
@SerializedName("title") val title: String,
// skills array that will need to be filled out based on the data I got in the json
var skills: List<Skill>
)
}
РЕДАКТИРОВАТЬ: предлагаемое решение
class CareersRemote(
@SerializedName("careers") val careers: List<Career>
) {
companion object {
fun parseResponse(response: Response<CareersRemote>): CareersResponse {
return if (response.isSuccessful) {
response.body()!!.format()
} else
CareersResponse(listOf(CareersResponse.ErrorType.Generic()))
}
}
fun format(): CareersResponse {
val careers = topCareers.map {
Career(
id = it.id,
title = it.title,
)
}.toMutableList()
return CareersResponse(CareersResponse.SuccessData(careers = careers))
}
data class Career(
@SerializedName("id") val id: String,
@SerializedName("title") val title: String,
@SerializedName("math_skill") val mathSkill: Int
@SerializedName("other_skill") val mathSkill: Int
) {
var skills: List<Skill> = {
val mathSkill = Skill(name: "Math", rating: mathSkill, color: /**some color*/)
val otherSkill = Skill(name: "Other", rating: otherSkill, color: /**some color*/)
return listOf(mathSkill, otherSkill)
}
}
}