您需要将类型传递给readValue-函数,否则Jackson 无法知道它应该转换为哪种类型。默认情况下,jackson 只返回一个包含键及其值的映射。
因此,对于您的特定问题,您可以只创建 parse-function inline 并将 reified 添加到您传递的类型中。这确保了实际类型也传递给杰克逊。另见reified types in the kotlin reference。或者,您传递实际类型(使用 TypeReference 或类本身,如果它不是通用的)。
之前这个答案还包含一个如何将 json 列表反序列化为实际列表的一般信息,我将在此处留下以供参考:
mapper.readValue(result, object : TypeReference<List<MyClass>>() {})
或者如果你使用jackson-module-kotlin:
mapper.readValue<List<MyClass>>(result)
应用于您的函数,可能如下所示:
inline fun <reified T : Any>parse(result: String): T = mapper.readValue(result, object : TypeReference<T>() {})
或使用 jackson-module-kotlin:
inline fun <reified T : Any>parse(result: String): T = mapper.readValue(result)
然后调用它就是:
val yourObjList = parse<List<MyClass>>(yourJson)
// or
val yourObjList : List<MyClass> = parse(yourJson)
请注意,我使用了reified(这意味着inline)。如果您不使用reified,则实际类型不会传递给jackson-module-kotlin 的具体方法。