0

My class looks like this:

@Serializable(with = ItemSerializer::class)
class Item<E>(
    val id: ItemId,
    val elem: E,
)

But when I try to use it, I get error

Serializer for class 'Item' is not found. Please ensure that class is marked as '@Serializable' and that the serialization compiler plugin is applied.

How to write Serializer for class Item and use it?

I try to write my own serializer, but I still get issue:

@OptIn(ExperimentalSerializationApi::class)
@Serializer(forClass = Item::class)
class ItemSerializer<E>(private val serializer: KSerializer<E>) : KSerializer<Item<E>> {
    override val descriptor: SerialDescriptor =
        buildClassSerialDescriptor("Item") {
            element("id", String.serializer().descriptor)
            element("elem", serializer.descriptor)
        }

    override fun serialize(encoder: Encoder, value: Item<E>) {
        encoder.encodeStructure(descriptor) {
            encodeStringElement(descriptor, 0, value.id)
            encodeSerializableElement(descriptor, 1, serializer, value.elem)
        }
    }

    override fun deserialize(decoder: Decoder): Item<E> {
        var id: String? = null
        var elem: E? = null
        decoder.decodeStructure(descriptor) {
            while (true) {
                when (val index = decodeElementIndex(descriptor)) {
                    0 -> id = decodeStringElement(descriptor, 0)
                    1 -> elem = decodeSerializableElement(descriptor, 1, serializer)
                    CompositeDecoder.DECODE_DONE -> break
                    else -> error("Unexpected index: $index")
                }
            }
        }
        return Item(id ?: error("Missing required field 'id'"), elem ?: error("Missing required field 'elem'"))
    }
}
  • Can you confirm that you added the serialization maven/gradle plugin and did not just add the runtime dependency? https://github.com/Kotlin/kotlinx.serialization#using-the-plugins-block Also see https://stackoverflow.com/questions/64504250/how-to-serialize-a-generic-class-with-kontlinx-serialization – somethingsomething May 28 '23 at 06:47

0 Answers0