Deserializar cadena JSON a Diccionario

Tengo esta cadena:

[{ "processLevel" : "1" , "segments" : [{ "min" : "0", "max" : "600" }] }] 

Estoy deserializando el objeto:

 object json = jsonSerializer.DeserializeObject(jsonString); 

El objeto se ve así:

 object[0] = Key: "processLevel", Value: "1" object[1] = Key: "segments", Value: ... 

Y tratando de crear un diccionario:

 Dictionary dic = json as Dictionary; 

pero dic obtiene null .

Cuál puede ser el problema ?

Vea la respuesta de mridula de por qué está obteniendo nulo. Pero si quiere convertir directamente la cadena json a diccionario, puede intentar con el siguiente fragmento de código.

  Dictionary values = JsonConvert.DeserializeObject>(json); 

La documentación de MSDN para la palabra clave as indica que la expression as type la statement expression as type es equivalente a la expression is type ? (type)expression : (type)null la statement expression is type ? (type)expression : (type)null expression is type ? (type)expression : (type)null . Si ejecuta json.GetType() , devolverá System.Object[] y no System.Collections.Generic.Dictionary .

En casos como este, donde el tipo de objeto en el que deseo deserializar un objeto json es complejo, utilizo una API como Json.NET. Puedes escribir tu propio deserializador como:

 class DictionaryConverter : JsonConverter { public override bool CanConvert(Type objectType) { Throw(new NotImplementedException()); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { // Your code to deserialize the json into a dictionary object. } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { Throw(new NotImplementedException()); } } 

Y luego puede usar este serializador para leer el JSON en su objeto de diccionario. Aquí hay un ejemplo .

Me gusta este método:

 using Newtonsoft.Json.Linq; //jsonString is your JSON-formatted string JObject jsonObj = JObject.Parse(jsonString); Dictionary dictObj = jsonObj.ToObject>(); 

Ahora puede acceder a cualquier cosa que desee utilizando el dictObj como diccionario. También puede usar Dictionary si prefiere obtener los valores como cadenas.

El problema es que el objeto no es de tipo Dictionary o un tipo compatible, por lo que no se puede convertir directamente. Yo crearía un objeto personalizado y usaría Deserialize.

 public class DeserializedObject{ public string processLevel{get;set;} public object segments{get;set} } IEnumerable object=jsonSerializer.Deserialize>(json);