【发布时间】:2021-12-28 22:59:34
【问题描述】:
我正在尝试为List<Pair<String, Any>> 类型创建一个序列化程序,我需要这种类型用于我必须操作键和值但用户可以随时更改键名并且使用对列表的项目很多更好地满足我的需求(并且不适用于地图)。
我有这段代码,但它会生成一个compiler error
class SnapshotListPairSerializer<K, V>(private val keySerializer: KSerializer<K>, private val valueSerializer: KSerializer<V>) :
KSerializer<SnapshotStateList<Pair<K, V>>> {
override val descriptor: SerialDescriptor = ListSerializer(PairSerializer(keySerializer, valueSerializer)).descriptor
override fun serialize(encoder: Encoder, value: SnapshotStateList<Pair<K, V>>) {
encoder.encodeSerializableValue(ListSerializer(PairSerializer(keySerializer, valueSerializer)), value as List<Pair<K, V>>)
}
override fun deserialize(decoder: Decoder): SnapshotStateList<Pair<K, V>> {
val list = mutableStateListOf<Pair<K, V>>()
val items = decoder.decodeSerializableValue(ListSerializer(PairSerializer(keySerializer, valueSerializer)))
list.addAll(items)
return list
}
}
另外,SnapshotStateList 是一个来自Jetpack Compose 并扩展List 的类。
【问题讨论】:
-
(PasteBin 链接提供
Error, this is a private paste or is pending moderation.— 这当然是为什么在可能的情况下直接在问题中包含类似内容的原因之一。) -
你的代码对我来说编译得很好。请不要在 SO 问题上使用指向您的代码/错误的链接,而是使用格式化的代码/堆栈跟踪的重要部分。
-
抱歉链接在几天前还在工作,我会更改它,但我的堆栈跟踪就像 3000 行一样长,有很多编译器代码和编译器说“那里那里那里我不是工作”。
-
这个错误现在在 pastebin 上是公开的。
-
感谢您提供完整的堆栈跟踪。但是,您能否在问题中包含您遇到的异常的 main 点,即异常,正如现在两次建议的那样? “后端内部错误:IR 降低期间的异常”它不仅可以防止此类问题,而且对那些试图帮助您的人更友好,并且确保您的问题的本质可以更轻松地在 Google 结果中结束回报帮助他人。 ;)
标签: kotlin serialization android-jetpack-compose key-value kotlinx.serialization