Why can't you just instantiate the required converter inside your higher level converter?
public class ClassAConverter : JsonConverter...
{
public override ... Read (...)
{
var childConverter = new ChildConverter(...);
}
}
Alternatively you don't even need to do that if you're basing it strictly on type. If you have already registered a converter to handle the SourceCache<Propeprty>
type then you can simply pass the sub-JSON string back to the JsonSerializer
again and have it serialize the child object for you. Basically what you're doing at your highest level now.