Списки сериализации с внешним сериализатором 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