kotlin - 如何一般地使用泛型反序列化Jackson容器

标签 kotlin jackson deserialization

我有一个方法签名,如下所示:

inline fun <reified TData: IBulkModel?> bulkCreate(path: String) {
    val type = jacksonTypeRef<RequestListWrapper<TData>>()
}

还有更多内容,但这是相关的部分。我在内联函数中有一个精制的T。我的期望是,对于任何给定的调用,这里的T将是函数的实际T,但不是,它是IBulkModel。

有没有办法让Kotlin进行这项工作,还是我坚持不上完整的类(class)?

最佳答案

甚至在精化参数中,嵌套类型参数也会丢失。保留的唯一类型是顶级类型。

jackson 对此有一个解决方案。您可以从Java使用类型工厂:

data class Generic<T>(val t: T)

fun main(args: Array<String>)
{
    val mapper = ObjectMapper()

    val type: JavaType = mapper.typeFactory
                               .constructParametricType(Generic::class.java, Int::class.java)

    val instance: Generic<Int> = mapper.readValue("""{"t":32}""", type)
}

关于kotlin - 如何一般地使用泛型反序列化Jackson容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52319749/

相关文章:

c# - 当输入字符串不是有效的 Json 并且以数字开头时,使用 JsonConvert.DeserializeObject

python - 为什么 Pickle 不像文档中所说的那样调用 __new__ ?

Android资源编译失败(values.xml :200: error: invalid color)

generics - 扩展函数内的 Kotlin KClass 实例

android - 如何使用 Kotlin 和可待因结构在改造中拥有多个基本 URL

java - 以编程方式重启 Spring Boot 应用程序/刷新 Spring Context

java - 将日期传递给 postman 时出现“未找到转换器”错误

javascript - 如何将多级 JavaScript 对象反序列化为 HTML 表单?

java - 使用 @JsonAnyGetter 时忽略 PropertyNamingStrategy

java - jackson 接受否定日期