Списки сериализации с внешним сериализатором kotlinx

Итак, у меня есть этот класс Item.kt

class Item {
    val name = ""
    val loc = ""
    val price = 0.0
    override fun toString() = "$name <$loc> $price"
}

Так как этот класс находится в другой библиотеке (я не могу редактировать его источник), у меня есть внешний Serializer для него.

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())
    }
}

Теперь самое сложное. Я могу использовать этот класс в другом классе, показанном ниже

Cart.kt

@Serializable
class Cart {
    val id: Long? = null
    @Serialize(with=ItemSerializer::class)
    val item:Item = Item()
}

но я не знаю, как использовать мой сериализатор, когда я использую список объектов. например

Cart.kt

@Serializable
class Cart {
    val id: Long? = null
    @Serialize(with=ItemSerializer::class) // doesn't work
    val items = mutableListOf<Item>()
}

Как мне это сделать, используя сериализацию kotlinx? Должен ли я написать совершенно новую библиотеку для сериализации списка и карты Item реализация?

2 ответа

Решение

Сейчас просто добавьте оператор аннотации файла, как этот, в самом начале вашего файла (перед именем вашего пакета)

@file:useSerializer(ItemSerializer::class)
package blah.blah

Решение с @file больше не работает, но у меня работает следующее.

      val items: List<@Serializable(with = ItemSerializer::class)Item>? = null
Другие вопросы по тегам