Код: Выделить всё
{
id: 1321,
season: {
value: *some value*,
description: *some description*
},
...,
type: {
value: *some value*,
description: *some description*
}
}
Чтобы избавиться от ненужной вложенности, я попытался создать собственный сериализатор, и он отлично работает:
Код: Выделить всё
@OptIn(ExperimentalSerializationApi::class)
open class EnumSerializer(
private val serializer: KSerializer
) : KSerializer {
override val descriptor: SerialDescriptor = buildClassSerialDescriptor(serializer.descriptor.serialName) {
element("value", serializer().descriptor)
element("description", serializer().descriptor)
}
override fun serialize(encoder: Encoder, value: T) {
encoder.encodeSerializableValue(serializer, value)
}
override fun deserialize(decoder: Decoder): T {
return decoder.decodeStructure(descriptor) {
lateinit var value: String
while (true) {
when (val i = decodeElementIndex(descriptor)) {
CompositeDecoder.DECODE_DONE -> break
0 -> value = decodeStringElement(descriptor, i)
1 -> decodeStringElement(descriptor, i)
else -> throw SerializationException("Unknown index $i")
}
}
defaultJson.decodeFromString(serializer, value)
}
}
}
Код: Выделить всё
internal object SeasonEnumSerializer : EnumSerializer(SeasonApi.generatedSerializer())
@OptIn(ExperimentalSerializationApi::class)
@Serializable(with = SeasonEnumSerializer::class)
@KeepGeneratedSerializer
enum class SeasonApi(val value: String) {
@SerialName("winter") WINTER("winter"),
@SerialName("spring") SPRING("spring"),
@SerialName("summer") SUMMER("summer"),
@SerialName("autumn") AUTUMN("autumn");
override fun toString(): String = value
}
@Serializable
data class ReleaseApi(
@SerialName("id") val id: Int,
@SerialName("season") val season: SeasonApi?,
...
@SerialName("type") val type: ReleaseTypeApi?,
...
)
Код: Выделить всё
{
value: null,
description: null
}
Как мне обрабатывать нулевые значения?
Подробнее здесь: https://stackoverflow.com/questions/793 ... serializer