2009-08-26 22 views
22

cómo decodificar una respuesta json en C#?Descodificación JSON en C#

+0

"la matriz": qué matriz estás hablando? –

+0

También consulte http://stackoverflow.com/questions/2246694/how-to-convert-json-object-to-custom-c-sharp-object uno de los ejemplos hacia las referencias inferiores 'Json.Decode()' de 'System.Web.Helpers' que he utilizado con éxito en el pasado. –

+0

Cerrando una pregunta, después de 4 años, espera ... esto es ASÍ. –

Respuesta

22

Echa un vistazo a DataContractJsonSerializer. Tendrás que apuntar a .NET 3.5, lo que significa que Visual Studio 2008 es bastante necesario. Here's a good blog post sobre el uso del serializador de contrato de datos Json.

+2

¡jaja me ganó por 20 segundos! –

+1

La versión [.Net 4 de DataContractJsonSerializer] (http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx) está disponible. – MrBry

5
+0

Estaba escribiendo check out, pero lo escribí mal y luego hice toda la línea nuevamente. lol –

+1

gracias a todos .. no soy mucho más familiar con .net y necesito utilizar una información JSON. Por lo tanto, sería grato si alguien puede dar una muestra de código que indique cómo decodificar los datos de json – raki

3

Las clases integradas .NET tienen sus ventajas. Pero tienen sus deficiencias.

Por ejemplo, DataContractJsonSerializer no está disponible en .NET 2.0, System.Web.Extensions necesita derechos de administrador para instalarlo (en NET 2.0 - puede localizarlo localmente, si no tiene un proyecto WebSite) y no lo hace No funciona en SilverLight y WindowsPhone. Si tiene un proyecto WebSite, debe copiar los ensamblados System.Web.Extensions en su proyecto y luego eliminarlos de GAC, de lo contrario, VisualStudio no entiende que tiene que copiarlos localmente.

Pero más importante aún, si trabaja con prácticamente cualquier biblioteca de JavaScript, p. SlickGrid (AJAX rejilla), se le topas con este objeto JavaScript válida (pero es JSON válido, porque fnFormatDate_DE es una llamada de función y no de texto, que carece de las comillas):

FormatterCallback : 
{ 
    name : "DateFormatter_DE" 
    func: fnFormatDate_DE(val) 
} 

No hay posibilidad de serializar esto con cualquiera de las clases integradas .NET (porque es JSON no válido). Además, se quedan cortos en términos de rendimiento, disponibilidad en SilverLight, Windows Phone y WindowsRT. No son ni licencia OpenSource ni MIT. No tienen soporte para sangría (JSON legible para humanos), y no pueden serializar DataTables, y tienen problemas con las referencias circulares. No puede manejar los errores de serialización con ellos, no puede serializar las enumeraciones a sus nombres, y no puede cambiar el formato de fecha (OK, esto no es realmente un problema, porque el formato de fecha MS es el único formato de fecha del safari) la mierda entiende [no entiende ISO]), y no serializa ni nHibernate ni Entity ...

Pero lo más importante es que no querrás cambiar tu biblioteca o ajustar las referencias del proyecto si pasas de .NET 2.0 a 4.0, no desea volver a escribir el código si desea utilizar algún código en SilverLight/Windows Phone, y no desea escribir una función para embellecer JSON si desea ver si tiene la clase correcta, y no querrá escribir su propio método para quitar comillas solo porque las bibliotecas de Microsoft no pueden manejar JSON no válido.

Además, las bibliotecas de Microsoft tienen un bajo rendimiento y no se pueden serializar a BSON (para usar con bases de datos NoSQL como MongoDB).
Por todas estas razones, es mejor que elija NewtonSoft JSON (JSON.NET).
Es gratis y OpenSource (MIT license, no GPL).
Hay una matriz de comparación agradable aquí:
http://james.newtonking.com/pages/json-net.aspx

+0

Pasando por: https://github.com/dotnet/corefx-progress/blob/master/src-diff/README.md, 'System.Runtime.Serialization.Json' será de fuente abierta y estará disponible en corefx repo: https://github.com/dotnet/corefx (bajo licencia MIT, como todas las demás bibliotecas .NET que se hayan descargado allí). –