@kotlinx.serialization.Serializable
public data class SubSealedA(val s: String) : SimpleSealed()
@kotlinx.serialization.Serializable
public data class SubSealedB(val i: Int) : SimpleSealed()
}
val messageModule = SerializersModule {
polymorphic(Interface::class) {
SimpleSealed::class with SimpleSealed.serializer()
SimpleSealed.SubSealedA::class with SimpleSealed.SubSealedA.serializer()
SimpleSealed.SubSealedB::class with SimpleSealed.SubSealedB.serializer()
}
}
val json = Json(JsonConfiguration.Stable.copy(classDiscriminator = "nodeType"), context = messageModule)
val j = json.stringify(PolymorphicSerializer(Interface::class), SimpleSealed.SubSealedA("foo"))
println(j)
println(json.parse(PolymorphicSerializer(Interface::class), j))
Почему оно не стягивает sealed и не работает без указания вручную всех реализаций силда? И.е. это - не нужно, если я сериализую SimpleSealed``SimpleSealed.serializer()'ом, но почему-то вдруг нужно когда сериализую полиморфный интерфейс?
SimpleSealed.SubSealedA::class with SimpleSealed.SubSealedA.serializer()
SimpleSealed.SubSealedB::class with SimpleSealed.SubSealedB.serializer()
Или я опять чего-то не понимаю?)
вы наверное спутали два подходе, https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#sealed-classes
и в этом случае, опять же следуя логике, PolymorphicSerializer() используется для Interface, а для SimpleSealed я указал SimpleSealed.serializer(), который и так умеет работать со всем остальным
Обсуждают сегодня