我有很多不同的类,它们的属性需要自定义反序列化。
例:
data class Specific(val a: String, val b: String) // <-- Needs special deserialization
data class Foo(val value: String, val sp: Specific)
data class Bar(val something: Int, val sp: Specific)
我尝试使用
StdDeserializer
创建自定义反序列化器。而且这仅在我为实际类(Foo
和Bar
)编写反序列化程序时才有效,但是我只想为Specific
类型编写一个反序列化程序。当我使用Kotlin时,我会喜欢使用非Java注释的方式。
最佳答案
使用要用于反序列化的ObjectMapper
,首先为Specific
类注册一个自定义反序列化器。然后,在反序列化此类的实例时,无论您是直接对其进行反序列化,还是作为其他要反序列化的对象的属性,都将使用该方法。
例如,您可以执行以下操作:
class SpecificDeserializer() : StdDeserializer<Specific>(Specific::class.java) {
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Specific {
// Deserialize
}
}
val mapper = jacksonObjectMapper()
mapper.registerModule(SimpleModule().also {
it.addDeserializer(Specific::class.java, SpecificDeserializer())
})
val foo = mapper.readValue<Foo>(...
这是here解释的。注意,对于序列化,可以采用相同的方法。