Solución:
Vea la respuesta de mridula para saber por qué obtiene nulo. Pero si desea convertir directamente la cadena json en un diccionario, puede intentar seguir el fragmento de código.
Dictionary<string, object> values =
JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
Me gusta este método:
using Newtonsoft.Json.Linq;
//jsonString is your JSON-formatted string
JObject jsonObj = JObject.Parse(jsonString);
Dictionary<string, string> dictObj = jsonObj.ToObject<Dictionary<string, object>>();
Ahora puede acceder a todo lo que desee utilizando el dictObj
como diccionario. También puedes usar Dictionary<string, string>
si prefiere obtener los valores como cadenas.
La documentación de MSDN para as
la palabra clave indica que la declaración expression as type
es equivalente a la declaración expression is type ? (type)expression : (type)null
. Si tu corres json.GetType()
volverá System.Object[]
y no System.Collections.Generic.Dictionary
.
En casos como estos, donde el tipo de objeto en el que quiero deserializar un objeto json es complejo, uso una API como Json.NET. Puede escribir su 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. He aquí un ejemplo.