¿Hay una manera fácil de llenar mi objeto C # con el objeto JSON pasado a través de AJAX?
Este es el objeto JSON pasado a C # WEBMETHOD desde la página usando JSON.stringify
{
"user": {
"name": "asdf",
"teamname": "b",
"email": "c",
"players": ["1", "2"]
}
}
C # WebMetod que recibe el objeto JSON
[WebMethod]
public static void SaveTeam(Object user)
{
}
Clase C # que representa la estructura del objeto JSON Object pasado al WebMethod
public class User
{
public string name { get; set; }
public string teamname { get; set; }
public string email { get; set; }
public Array players { get; set; }
}
Respuestas:
Una buena forma de usar JSON en C # es con JSON.NET
Inicio rápido y documentación de API de JSON.NET: el sitio oficial lo ayuda a trabajar con él.
Un ejemplo de cómo usarlo:
fuente
Como todos amamos el código de un revestimiento
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.
si tenemos clase, use a continuación.
sin clase, entonces usa dinámico
fuente
Para mantener sus opciones abiertas, si está usando .NET 3.5 o posterior, aquí hay un ejemplo resumido que puede usar directamente desde el marco usando Generics. Como otros han mencionado, si no se trata solo de objetos simples, realmente debería usar JSON.net.
Necesitarás:
fuente
Dado su ejemplo de código, no debería necesitar hacer nada más.
Si pasa esa cadena JSON a su método web, analizará automáticamente la cadena JSON y creará un objeto Usuario rellenado como el parámetro para su método SaveTeam.
Sin embargo, en general, puede usar la
JavascriptSerializer
clase de la siguiente manera, o para mayor flexibilidad, use cualquiera de los diversos marcos Json que existen (Jayrock JSON es bueno) para una fácil manipulación JSON.fuente
System.Web.Extensions
ensamblaje y agregar unusing System.Web.Script.Serialization
para llegar alJavaScriptSerializer
, pero una vez que lo haga, esta parece ser la forma más limpia de deserializar susjson
cadenas en clases concretas de c #.Otra solución realmente simple es usar la biblioteca Newtonsoft.Json:
fuente
Los siguientes 2 ejemplos hacen uso de
Ejemplo 1: uso de System.Web.Script.Serialization
Uso: objeto JSON a objeto C # personalizado
Ejemplo 2: uso de System.Web.Helpers
Uso: objeto JSON a objeto C # personalizado
Este código requiere agregar el espacio de nombres System.Web.Helpers que se encuentra en,
O
¡Espero que esto ayude!
fuente
dynamic
tipos, no obtienes ninguna verificación de tipo verdadero. Por ejemplo, si su JSON contiene"Name" : "Ahmed"
y escribe incorrectamente "Nombre" en su código C #, es un error de tiempo de ejecución (bleh).Más información vaya al siguiente enlace http://ishareidea.blogspot.in/2012/05/json-conversion.html
Sobre
DataContractJsonSerializer Class
usted puede leer aquí .fuente
El uso de JavaScriptSerializer () es menos estricto que la solución genérica ofrecida: public static T Deserialize (string json)
Eso puede ser útil al pasar json al servidor que no coincide exactamente con la definición de Objeto a la que intenta convertir.
fuente
En cuanto al rendimiento, encontré el serializador de ServiceStack un poco más rápido que otros. Es la clase JsonSerializer en ServiceStack.Text namespace.
https://github.com/ServiceStack/ServiceStack.Text
ServiceStack está disponible a través del paquete NuGet: https://www.nuget.org/packages/ServiceStack/
fuente
JSON.Net es su mejor opción, pero, dependiendo de la forma de los objetos y de si hay dependencias circulares, puede usar JavaScriptSerializer o DataContractSerializer.
fuente
El generador de clases JSON C # en codeplex genera clases que funcionan bien con NewtonSoftJS.
fuente
Serializador de JavaScript: requiere
using System.Web.Script.Serialization;
Serializador de contrato de datos: requiere
using System.Runtime.Serialization.Json;
: el tipo genérico T debería ser serializable más en contrato de datosfuente
En lugar de enviar como un simple objeto.
Cree una clase pública de propiedades que sea accesible y envíe los datos al método web.
use los mismos nombres de parámetros en la llamada ajax para enviar datos.
fuente