我正在尝试用Jackson CBOR Dataformats将一个映射序列化为Kotlin中的CBOR,如果键是一个字符串,我可以很容易地检索该键的值,但是当Int中的键时,它对我做的每一个get都返回null,如果我从value ()输出输出,它会给我来自所有键的所有值。
代码如下:
val mapper = CBORMapper()
val map = HashMap<Any,Any>()
map[123] = intArrayOf(22,67,2)
map[456] = intArrayOf(34,12,1)
val cborData = mapper.writeValueAsBytes(map)
println(cborData.toHex())
val deserialized = mapper.readValue(cborData, HashMap<Any,Any>().javaClass)
println(deserialized.get(123)) // returns null
println(values()) // returns all values发布于 2021-08-25 12:49:01
尝试迭代键并检查类型:
deserialized.keys.iterator().next().javaClass以上代码,在您的情况下应该打印:
123 - class java.lang.String
456 - class java.lang.String和:
println(deserialized.get("123"))指纹:
[22, 67, 2]看一看文档
模块扩展了标准的Jackson (JsonFactory,JsonParser,JsonGenerator),并与所有高级数据抽象(数据绑定、树模型和可插拔扩展)无缝地工作。
可以使用Kotlin's readValue方法强制类型:
import com.fasterxml.jackson.module.kotlin.readValue像这样使用它:
val deserialized = mapper.readValue<Map<Int, IntArray>>(cborData)
deserialized.keys.forEach { key -> println("$key - ${key.javaClass}") }
println(Arrays.toString(deserialized[123]))以上代码打印:
456 - int
123 - int
[22, 67, 2]另请参阅:
https://stackoverflow.com/questions/68919370
复制相似问题