С полиморфной сериализацией я хочу сериализовать классы A, B1, B2. Я хочу получить следующую строку с классом B2
{"type":"type_2","baseField":"base_field_B","fieldB":true,"fieldB2":"field_B_2"}
Я использую иерархию вроде
interface BaseClass {
val baseField: String
}
@Serializable
@SerialName("type_1")
data class A(
override val baseField: String,
val fieldA: Int
) : BaseClass
@Serializable
@SerialName("type_2")
abstract class B: BaseClass{
abstract override val baseField: String
abstract val fieldB: Boolean
}
@Serializable
data class B1(
override val baseField: String,
override val fieldB: Boolean,
val fieldB1: Float
) : B()
@Serializable
data class B2(
override val baseField: String,
override val fieldB: Boolean,
val fieldB2: String
) : B()
и выполняю сериализацию следующим образом
Json(context = SerializersModule {
polymorphic(BaseClass::class) {
A::class with A.serializer()
B::class with B.serializer()
}
}).stringify(
PolymorphicSerializer(BaseClass::class),
B1("base_field_B", true, "field_B_2")
)
В результатеЯ получаю kotlinx.serialization.SerializationException: class B2 (Kotlin reflection is not available) is not registered for polymorphic serialization in the scope of interface BaseClass (Kotlin reflection is not available)
Как правильно сериализовать данную структуру? Классы B1, B2 должны быть сериализованы с типом "type_2".