HashMap 的 Kotlin 序列化

问题描述 投票:0回答:1

遇到 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>
(据我所知)应该是可序列化的。 我发现的所有教程都准确地展示了我尝试过的内容(据我所知)。那么为什么他的作品没有呢?

json kotlin serialization hashmap
1个回答
0
投票

我怀疑您错过了

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
}
© www.soinside.com 2019 - 2024. All rights reserved.