如何为列表<对<字符串、任意创建序列化程序>>



我正试图为List<Pair<String, Any>>类型创建一个Serializer,我需要这种类型来处理一个项目,在这个项目中,我必须操作键和值,但用户可以随时更改键名,使用List of Pair更符合我的要求(并且不能真正使用Map(。

我有这个代码,但它会产生一个编译器错误

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的类。

您得到的异常是:

后端内部错误:IR降低期间出现异常

考虑到这并没有为您提供有意义的信息,而是提到了编译器内部,这不是您的错误,而是一个错误:搜索已知错误的提示。

这似乎与我在GitHub上提交的问题非常相似。

如果是相同的原因,则应在1.6.10版本中进行修复。这也许可以解释为什么菲利浦不能责备。

另外,您将遇到的下一个问题可能是Any没有注册用于多态序列化。序列化Any是不可靠的。如果您陷入困境,文档对您没有帮助,我建议您发布一个新问题,其中包含关于确切用例/预期类型的更多信息,我很乐意提供帮助。

最新更新