Question

Is it possible to serialize/deserialize Map<String, Object> where type of object (mapped value) would be determined by its key.

{
    "number":42,
    "desc":"something really important",
    "location":{
        "x":9999,
        "y":9999,
        "wkid":9999
    },
    "shape":{
        "type":"polyline",
        "data":"dGhpcyBnZW9tZXRyeSBpcyBmYWtlIDpQ"
    }
}

In this particular case I know that desc is always going to be string, location and shape - 3rd party classes (I have serializers and deserializers for them) and other values are boxed primitives.

Is it possible to do something like this with jackson? Could such thing be done by using MapSerializer/MapDeserializer? (I couldn't find any examples)

Was it helpful?

Solution

Yes, it's possible. I would recommend you to try jsonschema2pojo. Just paste you JSON and select source type JSON.

OTHER TIPS

Yes, it could be done. Have another structure that contains a pair of Map<String, Class> and link the key name of the first structure (Map<String, Object>) to the second one.

For example

Map map = new HashMap<String, Object>();`

map.put("desc", "something really important");

Map deser = new HashMap<String, Class>();

deser.put("desc", StringDeserializer.class);

You could also use a deser<String, String>, where the value would be the class name, then you just do a class loading by name http://www.tutorialspoint.com/java/lang/class_forname_loader.htm

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top