如何反序列化包含另一个数据类的数据类

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

我有两个数据类A和B

data class A(val b: B, val text: String)

data class B(
    @JsonProperty("b") val number: Int,
    @JsonProperty(access = JsonProperty.Access.READ_ONLY) val date: String = "",
)

我的对象映射器定义如下:

val objectMapper = ObjectMapper().apply { registeredMoudle(KotlinModule())}

主要:

val json = "{\"b\": 5, \"text\": \"blabla\"}"
val a = objectMapper.readValue(json,A::class.java) 

我得到一个不匹配的输入异常:无法构造“B”的实例(尽管至少存在一个创建者):没有字符串参数构造函数/工厂方法来从字符串值(“5”)反序列化

问题是,当我尝试自行反序列化 B 时,它正在工作。所以我不明白为什么它在 A 上不起作用

json kotlin jackson deserialization
1个回答
1
投票

这是因为你的json格式化方式,b应该是一个对象,而不是字符串。

换句话说,当你的两个类以这种方式布局时,这个(建议的 json)将不起作用:

val json = "{\"b\": "5", \"text\": \"blabla\"}"

但这会

val json2 = "{\"b\": { \"b\": 5 }, \"text\": \"blabla\"}"

© www.soinside.com 2019 - 2024. All rights reserved.