使用外部kotlinx序列化器序列化列表

时间:2019-01-24 00:10:21

标签: kotlin kotlinx.serialisation

所以,我有这个课程Item.kt

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

由于此类位于另一个库中(我无法编辑其源代码),因此我有一个外部序列化器。

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序列化进行处理?我必须写一个全新的lib来序列化Item实现的列表和映射吗?

1 个答案:

答案 0 :(得分:0)

现在,只需在文件的开头(在包名称之前)添加这样的文件注释语句

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