Json.NET: Deserialización de diccionarios nesteds

Al deserializar un objeto a un Dictionary ( JsonConvert.DeserializeObject<IDictionary>(json) ) los objetos nesteds se deserializan a JObject s. ¿Es posible forzar que los objetos nesteds se deserialicen a Dictionary s?

Encontré una forma de convertir todos los objetos nesteds a Dictionary proporcionando una implementación CustomCreationConverter :

 class MyConverter : CustomCreationConverter> { public override IDictionary Create(Type objectType) { return new Dictionary(); } public override bool CanConvert(Type objectType) { // in addition to handling IDictionary // we want to handle the deserialization of dict value // which is of type object return objectType == typeof(object) || base.CanConvert(objectType); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartObject || reader.TokenType == JsonToken.Null) return base.ReadJson(reader, objectType, existingValue, serializer); // if the next token is not an object // then fall back on standard deserializer (strings, numbers etc.) return serializer.Deserialize(reader); } } class Program { static void Main(string[] args) { var json = File.ReadAllText(@"c:\test.json"); var obj = JsonConvert.DeserializeObject>( json, new JsonConverter[] {new MyConverter()}); } } 

Documentación: CustomCreationConverter con Json.NET

Alternativa / Actualización:

Necesitaba deserializar un diccionario de diccionarios de Strings y con el Json.NET actual (5.0). No tuve que crear un CustomConverter, solo lo usé (en VB.Net):

 JsonConvert.DeserializeObject(Of IDictionary(Of String, IDictionary(Of String, String)))(jsonString) 

O, en C #:

 JsonConvert.DeserializeObject>(jsonString);