MrNetroful
MrNetroful

Reputation: 507

Jackson serialize object as key of map

Hi I'm facing problem with serialization of map where key is an custom class.

data class KeyClass(val id: Int, val name: String) {
    fun toJSON() = "\"KeyClass\": {\"id\":$id,\"name\":\"$name\"}"
}

Invocation:

 fun method(): Map<KeyClass, List<Something>> = ...

My jackson Serializer ofc I'm also adding this as module in objectMapper:

class KeyClassSerializer : JsonSerializer<KeyClass>() {
    override fun serialize(value: KeyClass, gen: JsonGenerator, serializers: SerializerProvider) {
        gen.writeRawValue(value.toJSON())
    }

}

class KeyClassSerializerModule : SimpleModule() {
    init {
        addKeySerializer(KeyClass::class.java, KeyClassSerializer())
    }
}

And JSON I'm receiving is:

"\"KeyClass\": {\"id\":1,\"name\":\"Thomas\"}" : [Something:...]

I mean the value of map is serialized correctly but key isn't.

Upvotes: 1

Views: 1506

Answers (1)

Oreste Viron
Oreste Viron

Reputation: 3805

I assume the expected result is :

"KeyClass": {
  "id": 1,
  "name":"Thomas"
} : [...]

But it's not valid Json. You can still do something like :

{
  "key" : {
      "id": 1,
      "name":"Thomas"
  },
  "value" : [...]
}

Upvotes: 1

Related Questions