kotlin - kotlinx.serialization , 编码解码 SnapshotStateList
问题描述
在 Jetpack Compose 中,SnapshotStateList是 List 的派生类,但每当我尝试在其上放置 Serializable 注释时,它都会显示“未找到此类的序列化程序,要使用带有类型或属性的上下文使用 @Contextual 注释”
我有一个类 ListContainer ,我想使其可序列化,它只包含一个项目列表,它是一个SnapshotStateList并且可以智能地转换为 List 但我不知道如何告诉 kotlin 序列化程序将其转换为 List / 使用简单列表序列化器!
解决方案
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
}
}
我不确定它是否有效,但这是我想出的,我会相应地更新答案
推荐阅读
- javascript - 有没有人修改过谷歌贪睡脚本?
- graphql - 我的突变有什么问题?试图用graphql在对象之间建立简单的关系
- iis - 如何解决 IIS 容器中的 503.0 错误
- python - 从守护进程收到的截断或过大的响应标头-大文件抛出错误-django
- javascript - 如何从元素数组中动态获取元素的值?
- python - numpy:如何将 1D 数组的每个值传播到 3D 数组中?
- lua - 循环和嵌套 if 语句的问题
- sql - 如何总结唯一的返回值
- ios - 核心数据中的默认值
- firebase - 如何在flutter中从firebase auth获取所有用户ID