diff --git a/openbis-common/source/java/ch/systemsx/cisd/common/api/server/json/deserializer/JsonTypeAndClassDeserializer.java b/openbis-common/source/java/ch/systemsx/cisd/common/api/server/json/deserializer/JsonTypeAndClassDeserializer.java index ec50687085e5a5ae923c457b20de7ac679a870e3..ab6cb776ebc31ef1edcf1689aac8350878fa5a64 100644 --- a/openbis-common/source/java/ch/systemsx/cisd/common/api/server/json/deserializer/JsonTypeAndClassDeserializer.java +++ b/openbis-common/source/java/ch/systemsx/cisd/common/api/server/json/deserializer/JsonTypeAndClassDeserializer.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; @@ -230,16 +231,23 @@ public class JsonTypeAndClassDeserializer extends AsPropertyTypeDeserializer final JsonParser actualJp; final JsonDeserializer<Object> deserializer; - if (t == JsonToken.START_ARRAY && _baseType.getRawClass().equals(Object.class)) - { - JavaType collectionType = - ctxt.getConfig().getTypeFactory().constructRawCollectionType(Collection.class); - deserializer = ctxt.findContextualValueDeserializer(collectionType, _property); - } else + JavaType type = _baseType; + + if (type.getRawClass().equals(Object.class)) { - deserializer = ctxt.findContextualValueDeserializer(_baseType, _property); + if (t == JsonToken.START_ARRAY) + { + type = + ctxt.getConfig().getTypeFactory() + .constructRawCollectionType(Collection.class); + } else if (t == JsonToken.START_OBJECT) + { + type = ctxt.getConfig().getTypeFactory().constructRawMapType(Map.class); + } } + deserializer = ctxt.findContextualValueDeserializer(type, _property); + if (tb != null) { tb.writeEndObject();