169 похожих чатов

Подскажите пожалуйста, почему данный код не работает? import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import

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

3 ответов

51 просмотр

чет странное, ругается на то, что ты пытаешься полиморфно примитив сериализовать, а можно только структуру, потому что полиморфная сериализация добавляет поле "type": "typeAnnotation" в итоговом жсоне, а у примитивов, естественно, некуда добавить это. но тут нигде нет примитивов, так если ещё и чинится переименовкой - вообще странно.

000Sanya- Автор вопроса

если ты уверен, что именно этот код фейлится и чинится переименованием - делай минимальный репродьюс и создавай ишшью.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта