¿Cómo puedo deserializar JSON en un Diccionario <cadena, cadena> simple en ASP.NET?
Tengo una lista simple de clave/valor en JSON que se envía de regreso a ASP.NET mediante POST. Ejemplo:
{ "key1": "value1", "key2": "value2"}
NO ESTOY INTENTANDO DESERIALIZAR EN OBJETOS .NET DE TIPO FUERTE
Simplemente necesito un simple Dictionary(Of String, String) , o algún equivalente (tabla hash, Dictionary(Of String, Object), StringDictionary de la vieja escuela; diablos, una matriz 2-D de cadenas funcionaría para mí.
Puedo usar cualquier cosa disponible en ASP.NET 3.5, así como el popular Json.NET (que ya estoy usando para la serialización al cliente).
Aparentemente, ninguna de estas bibliotecas JSON tiene esta obvia capacidad lista para usar: están totalmente enfocadas en la deserialización basada en reflexión a través de contratos sólidos.
¿Algunas ideas?
Limitaciones:
- No quiero implementar mi propio analizador JSON
- Todavía no puedo usar ASP.NET 4.0
- Preferiría mantenerse alejado de la clase ASP.NET más antigua y obsoleta para JSON
Json.NET hace esto...
string json = @"{""key1"":""value1"",""key2"":""value2""}";
var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
Más ejemplos: Serialización de colecciones con Json.NET
Descubrí que .NET tiene una forma integrada de convertir la cadena JSON en un tipo Dictionary<String, Object>
a través System.Web.Script.Serialization.JavaScriptSerializer
del System.Web.Extensions
ensamblado 3.5. Utilice el método DeserializeObject(String)
.
Me topé con esto al hacer una publicación ajax (a través de jquery) de tipo de contenido 'aplicación/json' en un método de página .net estático y vi que el método (que tenía un solo parámetro de tipo Object
) recibió mágicamente este Diccionario.
Sistema.Texto.Json
Esto ahora se puede hacer usando System.Text.Json
el que está integrado en .NET Core 3.0 . Ahora es posible deserializar JSON sin utilizar bibliotecas de terceros.
var json = @"{""key1"":""value1"",""key2"":""value2""}";
var values = JsonSerializer.Deserialize<Dictionary<string, string>>(json);
También disponible en el paquete NuGet System.Text.Json si se utiliza .NET Standard o .NET Framework.
Asegúrese de leer y comprender:
- https://github.com/dotnet/runtime/issues/30452
Para aquellos que buscan en Internet y se topan con esta publicación, escribí una publicación de blog sobre cómo usar la clase JavaScriptSerializer.
Leer más... http://procbits.com/2011/04/21/quick-json-serializationdeserialization-in-c/
Aquí hay 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"]);