首页 > 解决方案 > kotlinx.serialization , 编码解码 SnapshotStateList

问题描述

在 Jetpack Compose 中,SnapshotStateList是 List 的派生类,但每当我尝试在其上放置 Serializable 注释时,它都会显示“未找到此类的序列化程序,要使用带有类型或属性的上下文使用 @Contextual 注释”

我有一个类 ListContainer ,我想使其可序列化,它只包含一个项目列表,它是一个SnapshotStateList并且可以智能地转换为 List 但我不知道如何告诉 kotlin 序列化程序将其转换为 List / 使用简单列表序列化器!

标签: kotlinserializationdeserializationkotlinx.serialization

解决方案


class SnapshotListSerializer<T>(private val dataSerializer:KSerializer<T>) :
    KSerializer<SnapshotStateList<T>> {

    override val descriptor: SerialDescriptor = ListSerializer(dataSerializer).descriptor

    override fun serialize(encoder: Encoder, value: SnapshotStateList<T>) {
        encoder.encodeSerializableValue(ListSerializer(dataSerializer), value as List<T>)
    }

    override fun deserialize(decoder: Decoder): SnapshotStateList<T> {
        val list = mutableStateListOf<T>()
        val items = decoder.decodeSerializableValue(ListSerializer(dataSerializer))
        list.addAll(items)
        return list
    }
}

我不确定它是否有效,但这是我想出的,我会相应地更新答案


推荐阅读