Hi, basically i have two Map<String,Market> ...
# serialization
j
Hi, basically i have two Map<String,Market> and Map<String,Station>, they are used for deserializing get calls.
Copy code
json {
serializersModule = SerializersModule {
    contextual(Map::class) { MarketMapSerializer }
    contextual(Map::class) { StationMapSerializer }}
}

 object MarketMapSerializer :
        JsonTransformingSerializer<Map<String, Market>>(MapSerializer(String.serializer(), Market.serializer())) {
        override fun transformDeserialize(element: JsonElement): JsonElement {
            return JsonObject(element.jsonObject.filterNot { (k, _) ->
                k == "token"
            })
        }
    }

    object StationMapSerializer :
        JsonTransformingSerializer<Map<String, Station>>(MapSerializer(String.serializer(), Station.serializer())) {
        override fun transformDeserialize(element: JsonElement): JsonElement {
            return JsonObject(element.jsonObject.filterNot { (k, _) ->
                k == "token"
            })
        }
    }
and i'm getting this exception. Exception in thread "main" kotlinx.serialization.modules.SerializerAlreadyRegisteredException: Contextual serializer or serializer provider for class kotlin.collections.Map already registered in this module. Is it possible to specify types in contextual mapping?
e
looks like what you should do is
Copy code
class CustomMapSerializer<K, V>(
    keySerializer: KSerializer<K>,
    valueSerializer: KSerializer<V>
) : JsonTransformingSerializer<Map<K, V>>(
    MapSerializer(keySerializer, valueSerializer)
)

Json {
    serializersModule = SerializersModule {
        contextual(Map::class) { (keySerializer, valueSerializer) ->
            CustomMapSerializer(keySerializer, valueSerializer)
        }
    }
}