使用外部 kotlinx 序列化程序序列化列表
Serializing Lists with external kotlinx Serializer
所以,我有这个 class Item.kt
class Item {
val name = ""
val loc = ""
val price = 0.0
override fun toString() = "$name <$loc> $price"
}
由于这个 class 在另一个库中(我无法编辑它的源代码),我有一个外部序列化程序。
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())
}
}
现在,困难的部分来了。我可以在另一个 class 中使用这个 class,如下所示
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
实现的列表和映射?
现在,只需在文件的最开头(包名之前)添加这样的文件注释语句
@file:useSerializer(ItemSerializer::class)
package blah.blah
所以,我有这个 class Item.kt
class Item {
val name = ""
val loc = ""
val price = 0.0
override fun toString() = "$name <$loc> $price"
}
由于这个 class 在另一个库中(我无法编辑它的源代码),我有一个外部序列化程序。
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())
}
}
现在,困难的部分来了。我可以在另一个 class 中使用这个 class,如下所示
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
实现的列表和映射?
现在,只需在文件的最开头(包名之前)添加这样的文件注释语句
@file:useSerializer(ItemSerializer::class)
package blah.blah