Мне удалось сделать это с помощью специального сериализатора.
Единственным недостатком является то, что, поскольку я не сохраняю тип, я не могу снова десериализовать объект, но мне нужно только сериализоваться в моей программе.
@Serializable
data class BaseClass2(
@Serializable(with = PlainObjectSerializer::class) val a: Any
)
object PlainObjectSerializer : KSerializer<Any> {
override val serialClassDesc: KSerialClassDesc
get() = SerialClassDescImpl("") //PlainObjectDesc
override fun save(output: KOutput, obj: Any) {
val saver = serializerByValue(obj, output.context)
output.writeSerializableValue(saver, obj)
}
override fun load(input: KInput): Any {
throw Exception("This serializer can only be used for serialization!")
}
}
РЕДАКТИРОВАТЬ: Как @ Nikky предложил , этот код может быть еще более упрощен с помощью плагина сериализации:
@Serializer(forClass = BaseClass2::class)
object PlainObjectSerializer : KSerializer<Any> {
override fun save(output: KOutput, obj: Any) {
val saver = serializerByValue(obj, output.context)
output.writeSerializableValue(saver, obj)
}
}