Tenho um problema com a serialização do Kotlin e preciso de ajuda:
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
}
Recebo um erro no meu IDE na linha 10 na chamada para Json.encodeToString(it)
:
Não é possível inferir o tipo para este parâmetro. Por favor, especifique-o explicitamente.
Por que isso?
it
é um HashMap<String, Double>
aqui que (AFAIK) deveria ser serializável. Todos os tutoriais que encontrei demonstram exatamente o que tentei (até onde posso dizer). Então por que isso não funciona?
Suspeito que você perdeu uma importação para
kotlinx.serialization.encodeToString
. Sem ela, usamos uma função membroencodeToString
que aceita 2 argumentos, não 1, e o primeiro argumento éSerializationStrategy<T>
. A função de extensãokotlinx.serialization.encodeToString
aceita um único argumentoT
. Ainda assim, a mensagem de erro é muito confusa e enganosa.Veja um exemplo funcional: https://pl.kotl.in/1g4sPuGDs