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 feeab4de70d31e9608722de017af27ff59c6a2a0..ec50687085e5a5ae923c457b20de7ac679a870e3 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 @@ -80,6 +80,20 @@ public class JsonTypeAndClassDeserializer extends AsPropertyTypeDeserializer return new JsonTypeAndClassDeserializer(this, prop); } + @Override + public Object deserializeTypedFromAny(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException + { + return deserializeTypedFromObject(jp, ctxt); + } + + @Override + public Object deserializeTypedFromArray(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException + { + return deserializeTypedFromObject(jp, ctxt); + } + @Override public Object deserializeTypedFromObject(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException @@ -211,9 +225,20 @@ public class JsonTypeAndClassDeserializer extends AsPropertyTypeDeserializer public Object deserializeWithoutType(JsonParser jp, DeserializationContext ctxt, TokenBuffer tb) throws IOException, JsonProcessingException { + JsonToken t = jp.getCurrentToken(); + final JsonParser actualJp; - final JsonDeserializer<Object> deserializer = - ctxt.findContextualValueDeserializer(_baseType, _property); + 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 + { + deserializer = ctxt.findContextualValueDeserializer(_baseType, _property); + } if (tb != null) {