Entonces, tengo esta clase Item.kt
class Item { val name = "" val loc = "" val price = 0.0 override fun toString() = "$name <$loc> $price" }Dado que esta clase está en otra biblioteca (no puedo editar su fuente), tengo un Serializador externo para ella.
ItemSerializer.kt
@Serializer(forClass = Item::class) object ItemSerializer: KSerializer<Item> { override fun serialize(output: Encoder, obj: Item) { } override fun deserialize(input: Decoder): Item { return df.parse(input.decode()) } }Ahora viene la parte difícil. Puedo usar esta clase en otra clase como se muestra a continuación
Carrito.kt
@Serializable class Cart { val id: Long? = null @Serialize(with=ItemSerializer::class) val item:Item = Item() }pero no sé cómo utilizar mi serializador cuando uso una lista de objetos de artículos. p.ej
Carrito.kt
@Serializable class Cart { val id: Long? = null @Serialize(with=ItemSerializer::class) // doesn't work val items = mutableListOf<Item>() } ¿Cómo debo hacerlo usando la serialización de kotlinx? ¿Tengo que escribir una biblioteca completamente nueva para serializar una lista y un mapa de la implementación del Item ?
por ahora, solo agregue una declaración de anotación de archivo como esta al comienzo de su archivo (antes del nombre de su paquete)
@file:useSerializer(ItemSerializer::class) package blah.blah