The problem is that `readValueAs()` is bit heavy-weight, and does create a new deserialization context. We should probably add a warning to that effect: while sometimes convenient, it is not the suggested way of handling deserializer delegation.
Other than this, your approach makes sense to me and should work.
So: instead of delegating via `JsonParser`, you need to locate deserializers through `DeserializationContext`; either fully dynamically (if necessary), or in `createContextual()` method that gets called if deserializer implements `ContextualDeserializer`. Latter is more efficient as you can avoid further lookups, but does require that you know in advance all deserializers you will need.
You may want to implement `ContextualDeserializer` even if you do not pre-fetch delegate deserializers, to get reference to `BeanProperty` that represents property for which deserializer is used. This is needed if deserializer uses any property annotations for customizations.
DeserializationContext has couple of different `findXxxDeserializer()` methods; javadocs try to explain the differences, but essentially you will want to use one(s) that take `BeanProperty` (and not ones described as "root value" deserializers). Difference is not always evident in practice, but with polymorphic types, and deserializers that are annotation-customizable, difference is significant. Let me know if you end up having issues with this access.
-+ Tatu +-