kotlinx.serialization.json.Json
@Serializable
sealed class Foo
@Serializable
data class A(val s: String = "A") : Foo()
@Serializable
sealed class Moo : Foo()
@Serializable
data class B(val s: String = "B") : Moo()
fun main() {
val list = B("adsa") as Foo
val json = Json.encodeToString(list)
println(json)
val list2: Foo = Json.decodeFromString(json)
println(list2)
}
Но если сменить имя класс B на другое, например Ba, то все начинает работать?
Ошибка:
Exception in thread "main" java.lang.IllegalStateException: Primitives cannot be serialized polymorphically with 'type' parameter. You can use 'JsonBuilder.useArrayPolymorphism' instead
at kotlinx.serialization.json.internal.PolymorphicKt.checkKind(Polymorphic.kt:57)
at kotlinx.serialization.json.internal.PolymorphicKt.findActualSerializer(Polymorphic.kt:32)
at kotlinx.serialization.json.internal.PolymorphicKt.access$findActualSerializer(Polymorphic.kt:1)
at kotlinx.serialization.json.internal.StreamingJsonEncoder.encodeSerializableValue(StreamingJsonEncoder.kt:214)
at kotlinx.serialization.json.Json.encodeToString(Json.kt:85)
at MainKt.main(main.kt:29)
at MainKt.main(main.kt)
Kotlin 1.5.20
kotlinx-serialization-json 1.2.2
чет странное, ругается на то, что ты пытаешься полиморфно примитив сериализовать, а можно только структуру, потому что полиморфная сериализация добавляет поле "type": "typeAnnotation" в итоговом жсоне, а у примитивов, естественно, некуда добавить это. но тут нигде нет примитивов, так если ещё и чинится переименовкой - вообще странно.
Дебаггером тип примитива показало Byte
если ты уверен, что именно этот код фейлится и чинится переименованием - делай минимальный репродьюс и создавай ишшью.
Обсуждают сегодня