Списки сериализации с внешним сериализатором kotlinx - PullRequest
0 голосов
/ 24 января 2019

Итак, у меня есть этот класс 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()
}

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

Cart.kt

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

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

1 Ответ

0 голосов
/ 14 февраля 2019

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

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