578 votos

¿Cómo puedo deserializar JSON a un simple Dictionary <string, string> en ASP.NET?

Tengo una simple clave/valor de la lista en JSON ser enviado de vuelta a ASP.NET a través de POST. Ejemplo:

{ "key1": "value1", "key2": "value2"}

NO ESTOY TRATANDO DE DESERIALIZAR EN ESTABLECIMIENTO INFLEXIBLE DE TIPOS .NET OBJETOS

Sólo necesito un viejo y simple Diccionario(De la cadena, Cadena), o algún equivalente (tabla de hash, Diccionario(De String, Object), de la vieja escuela StringDictionary--el infierno, un 2-D de la matriz de cadenas que iba a funcionar para mí.

Puedo usar cualquier cosa disponible en ASP.NET 3.5, así como el popular Json.NET (que ya estoy utilizando para la serialización para el cliente).

Al parecer, ninguno de estos JSON las bibliotecas tienen este frente-bofetadas obvio capacidad fuera de la caja-que está totalmente centrado en la reflexión basada en la deserialización a través de contratos fuertes.

Alguna idea?

Limitaciones:

  1. No quiero aplicar mi propio parser JSON
  2. No se puede utilizar ASP.NET 4.0 todavía
  3. Prefiere mantenerse alejado de los antiguos, obsoletos ASP.NET clase de JSON

769voto

James Newton-King Puntos 13880

Json.NET hace esto ...

 string json = @"{""key1"":""value1"",""key2"":""value2""}";

Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
 

Más ejemplos: Serializar colecciones con Json.NET

94voto

Crispy Puntos 756

Me descubrir NET ha construido en forma de emitir la cadena JSON en un Dictionary<String, Object> a través del System.Web.Script.Serialization.JavaScriptSerializer tipo en el 3,5 System.Web.Extensions ensamblaje. Utilice el método DeserializeObject(String) .

Me encontré con este al hacer un puesto ajax (a través de jQuery) de tipo de contenido "application / json 'a un método Página .net estática y vi que el método (que tenía un único parámetro de tipo Object ) por arte de magia recibido este Diccionario.

52voto

JP Richardson Puntos 11920

Para aquellos buscando en internet y tropezar con este post, escribí un post sobre cómo utilizar la clase JavaScriptSerializer.

Leer más ... http://procbits.com/2011/04/21/quick-json-serializationdeserialization en c/

He aquí un ejemplo:

 var json = "{\"id\":\"13\", \"value\": true}";
var jss = new JavaScriptSerializer();
var table = jss.Deserialize<dynamic>(json);
Console.WriteLine(table["id"]);
Console.WriteLine(table["value"]);
 

40voto

PvH Puntos 171

Traté de no usar ninguna aplicación externa JSON así que deserialised así:

 string json = "{\"id\":\"13\", \"value\": true}";

var serializer = new JavaScriptSerializer(); //using System.Web.Script.Serialization;

Dictionary<string, string> values = serializer.Deserialize<Dictionary<string, string>>(json);
 

29voto

Dasun Puntos 605

Yo tenía el mismo problema así que escribí este mi auto. Esta solución se diferencia de otras respuestas, porque se puede deserializar en múltiples niveles.

Sólo tienes que enviar cadena json en deserializeToDictionary función de retorno no inflexible Dictionary<string, object> objeto.

private Dictionary<string, object> deserializeToDictionary(string jo)
{
    var values = JsonConvert.DeserializeObject<Dictionary<string, object>>(jo);
    var values2 = new Dictionary<string, object>();
    foreach (KeyValuePair<string, object> d in values)
    {
        if (d.Value.GetType().FullName.Contains("Newtonsoft.Json.Linq.JObject"))
        {
            values2.Add(d.Key, deserializeToDictionary(d.Value.ToString()));
        }
        else
        {
            values2.Add(d.Key, d.Value);
        }
    }
    return values2;
}

Ex: Esto devolverá Dictionary<string, object> objeto de un Facebook JSON de respuesta.

private void button1_Click(object sender, EventArgs e)
{
    string responsestring = "{\"id\":\"721055828\",\"name\":\"Dasun Sameera Weerasinghe\",\"first_name\":\"Dasun\",\"middle_name\":\"Sameera\",\"last_name\":\"Weerasinghe\",\"username\":\"dasun\",\"gender\":\"male\",\"locale\":\"en_US\",  hometown: {id: \"108388329191258\", name: \"Moratuwa, Sri Lanka\",}}";
    Dictionary<string, object> values = deserializeToDictionary(responsestring);
}

Nota: la ciudad natal de más deserilize en un Dictionary<string, object> objeto.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: