Skip to content

Commit f8e8d82

Browse files
committed
add unbox key serializer
1 parent c24010a commit f8e8d82

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.fasterxml.jackson.module.kotlin
2+
3+
import com.fasterxml.jackson.core.JsonGenerator
4+
import com.fasterxml.jackson.databind.*
5+
import com.fasterxml.jackson.databind.ser.Serializers
6+
import com.fasterxml.jackson.databind.ser.std.StdSerializer
7+
import com.fasterxml.jackson.databind.type.TypeFactory
8+
9+
internal object ValueClassUnboxKeySerializer : StdSerializer<Any>(Any::class.java) {
10+
override fun serialize(value: Any, gen: JsonGenerator, provider: SerializerProvider) {
11+
val method = value::class.java.getMethod("unbox-impl")
12+
val unboxed = method.invoke(value)
13+
14+
if (unboxed == null) {
15+
val javaType = provider.typeFactory.constructType(method.genericReturnType)
16+
provider.findNullKeySerializer(javaType, null).serialize(null, gen, provider)
17+
return
18+
}
19+
20+
provider.findKeySerializer(unboxed::class.java, null).serialize(unboxed, gen, provider)
21+
}
22+
}
23+
24+
class KotlinKeySerializers : Serializers.Base() {
25+
override fun findSerializer(
26+
config: SerializationConfig,
27+
type: JavaType,
28+
beanDesc: BeanDescription
29+
): JsonSerializer<*>? = when {
30+
type.rawClass.isUnboxableValueClass() -> ValueClassUnboxKeySerializer
31+
else -> null
32+
}
33+
}

src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinModule.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ class KotlinModule @Deprecated(
123123

124124
context.addDeserializers(KotlinDeserializers())
125125
context.addSerializers(KotlinSerializers())
126+
context.addKeySerializers(KotlinKeySerializers())
126127

127128
fun addMixIn(clazz: Class<*>, mixin: Class<*>) {
128129
context.setMixInAnnotations(clazz, mixin)

0 commit comments

Comments
 (0)