遇到 kotlin 序列化问题,我需要一些帮助:
import kotlinx.serialization.json.Json
fun main() {
val someValue: Double = 1.0
val someKey: String? = null
HashMap(readMapFromStorage()).also {
it[someKey?:""] = someValue
}.let {
Json.encodeToString(it) // Cannot infer type for this parameter. Please specify it explicitly.
}.let {
runBlocking<Unit> { async { writeString("SomeCategory", it) } }
}
}
private fun readMapFromStorage(): Map<String, Double> {
return mapOf(
"" to 1.0,
"A" to 1.5,
"B" to 2.0,
)
}
private fun writeString(key: String, value: String) {
// do something clever
}
我在 IDE 的第 10 行调用
Json.encodeToString(it)
: 时收到错误
无法推断此参数的类型。请明确指定。
这是为什么呢?
it
是一个 HashMap<String, Double>
(据我所知)应该是可序列化的。
我发现的所有教程都准确地展示了我尝试过的内容(据我所知)。那么为什么他的作品没有呢?
我怀疑您错过了
kotlinx.serialization.encodeToString
的导入。如果没有它,我们将使用成员函数 encodeToString
,它接受 2 个参数,而不是 1 个,并且第一个参数是 SerializationStrategy<T>
。扩展函数 kotlinx.serialization.encodeToString
接受单个参数 T
。尽管如此,错误消息仍然非常令人困惑和误导。
请参阅工作示例:https://pl.kotl.in/1g4sPuGDs
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
fun main() {
val someValue: Double = 1.0
val someKey: String? = null
HashMap(readMapFromStorage()).also {
it[someKey?:""] = someValue
}.let {
Json.encodeToString(it) // Cannot infer type for this parameter. Please specify it explicitly.
}.let {
runBlocking<Unit> { async { writeString("SomeCategory", it) } }
}
}
private fun readMapFromStorage(): Map<String, Double> {
return mapOf(
"" to 1.0,
"A" to 1.5,
"B" to 2.0,
)
}
private fun writeString(key: String, value: String) {
// do something clever
}