Intentando convertir una cadena JSON en un objeto en C #. Usando un caso de prueba realmente simple:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
El problema es que routes_list nunca se establece; Es un objeto indefinido. ¿Algunas ideas?
JavaScriptSerializer
versión sobre MS, ya que no aceptará nada más que el formato JSON personalizado de WCF (por ejemplo, los campos de fecha que parecen fechas pero no están rodeados en DATE () fallan miserablemente)Respuestas:
Parece que estás tratando de deserializar a un objeto sin procesar. Puede crear una clase que represente el objeto al que está convirtiendo. Esto sería más útil en los casos en que se trata de objetos más grandes o cadenas JSON.
Por ejemplo:
Entonces su código de deserialización sería:
Se puede encontrar más información en este tutorial: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
fuente
O puede usar la biblioteca Newtownsoft.Json de la siguiente manera:
¿Dónde
T
está su tipo de objeto que coincide con su cadena JSON?fuente
Probablemente no quiera declarar rutas_lista como un
object
tipo. No tiene una propiedad .test, por lo que realmente no va a recuperar un buen objeto. Este es uno de esos lugares donde sería mejor definir una clase o una estructura, o hacer uso de la palabra clave dinámica.Si realmente desea que este código funcione como lo tiene, necesitará saber que el objeto devuelto por DeserializeObject es un diccionario genérico de cadena, objeto. Aquí está el código para hacerlo de esa manera:
Si desea utilizar la palabra clave dinámica, puede leer cómo aquí .
Si declara una clase o estructura, puede llamar a Deserialize en lugar de DeserializeObject de la siguiente manera:
fuente
object routes_list
. Usevar
o repítase explícitamente y declare routes_list como IDictionary <string, object>.Uso de objetos dinámicos con JavaScriptSerializer.
fuente
Newtonsoft es más rápido que el serializador de scripts Java. ... este depende del paquete Newtonsoft NuGet, que es popular y mejor que el serializador predeterminado.
solución de código de una línea.
fuente
Aquí hay una clase simple que improvisé en varias publicaciones ... Se ha probado durante unos 15 minutos, pero parece funcionar para mis propósitos. Se utiliza
JavascriptSerializer
para hacer el trabajo, al que se puede hacer referencia en su aplicación utilizando la información detallada en esta publicación .El siguiente código se puede ejecutar en LinqPad para probarlo:
¡Espero eso ayude!
fuente
Puede cumplir su requisito fácilmente utilizando la biblioteca Newtonsoft.Json. Estoy escribiendo el siguiente ejemplo para echarle un vistazo.
Clase para el tipo de objeto que recibe:
Código:
Esta es una manera muy simple de analizar su json.
fuente
Como dijo tripletdad99
pero si usted no desea crear un objeto adicional, puede hacerlo con
Dictionary
su lugarfuente
agregue este ddl para hacer referencia a su proyecto: System.Web.Extensions.dll
use este espacio de nombres: using System.Web.Script.Serialization;
fuente
Copie su Json y péguelo en el cuadro de texto en json2csharp y haga clic en el botón Generar.
Se generará una clase cs usando ese archivo cs como se muestra a continuación
¿Dónde
RootObject
está el nombre del archivo cs generado ?fuente
Otra forma rápida y fácil de semiautomatizar estos pasos es:
app.quicktype.io generó métodos de serialización basados en Newtonsoft. Alternativamente, ahora puede usar código como:
Cliente WebClient = nuevo Cliente Web ();
string myJSON = client.DownloadString (" https://URL_FOR_JSON.com/JSON_STUFF ");
var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject (myJSON);
fuente
Convierta una cadena JSON en un objeto en C #. Usando el siguiente caso de prueba ... funcionó para mí. Aquí " MenuInfo " es mi objeto de clase C #.
fuente
Primero debes incluir una biblioteca como:
fuente