Есть ли способ обработать динамические аннотации SerialName для Kotlin Serializer?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Есть ли способ обработать динамические аннотации SerialName для Kotlin Serializer?

Сообщение Anonymous »

У меня есть проблема, которую меняет имя моего поля в зависимости от моего ответа от других элементов. В сериализации Kotlin я знаю, что мы можем сериализовать поля и тому подобное < /p>
@Serializable data class WeatherResponse (@SerialName("some_weather_id") val weatherData:WeatherData )
Однако в моем случае аннотация "some_weather_id" может измениться на основе предыдущих данных и ответов API. Это может быть "ore_weather_id" и т.д. , но я получаю ошибку
Поле «WeatherData» требуется для типа с серийным именем 'com.test.weatherresponse', но он отсутствовал на пути: $
Вот мой собственный сериализатор, если я делаю что -то неправильное < /p>
object SerialNameSerializer : KSerializer {
override val descriptor = PrimitiveSerialDescriptor("DynamicSerialName", PrimitiveKind.STRING)

override fun serialize(encoder: Encoder, value: String) {
val dynamicName = getWeatherID()
encoder.encodeStructure(descriptor){
encodeStringElement(descriptor, 0, dynamicName)
encodeStringElement(descriptor,1,value)
}
}

override fun deserialize(decoder: Decoder): String {
val dynamicName = getWeatherID()
decoder.decodeStructure(descriptor){
val name = decodeStringElement(descriptor,0)
if(name != dynamicName) {
throw SerializationException("Unexpected field name: $name")
}
return@decodeStructure decodeStringElement(descriptor, 1)
}
return dynamicName
}

private fun getWeatherID(): String {
return "some_weather_id"
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... serializer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»