serializar leer ejemplo deserialize construir con c# asp.net json

leer - Cómo crear una cadena JSON en C#



response json c# (12)

Eche un vistazo a http://www.codeplex.com/json/ para el proyecto json-net.aspx. ¿Por qué reinventar la rueda?

Acabo de usar el XmlWriter para crear algunos XML para enviar de vuelta en una respuesta HTTP. ¿Cómo crearías una cadena JSON? ¿Supongo que solo usaría un constructor de cadenas para compilar la cadena JSON y formatear su respuesta como JSON?


El DataContractJsonSerializer hará todo por usted con la misma facilidad que el XMLSerializer. Es trivial utilizar esto en una aplicación web. Si está utilizando WCF, puede especificar su uso con un atributo. La familia DataContractSerializer también es muy rápida.



Este fragmento de código utiliza el DataContractJsonSerializer de System.Runtime.Serialization.Json en .NET 3.5.

public static string ToJson<T>(/* this */ T value, Encoding encoding) { var serializer = new DataContractJsonSerializer(typeof(T)); using (var stream = new MemoryStream()) { using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, encoding)) { serializer.WriteObject(writer, value); } return encoding.GetString(stream.ToArray()); } }


He encontrado que no necesitas el serializador en absoluto. Si devuelve el objeto como una lista. Dejame usar un ejemplo.

En nuestro asmx obtenemos los datos usando la variable que pasamos

// return data [WebMethod(CacheDuration = 180)] public List<latlon> GetData(int id) { var data = from p in db.property where p.id == id select new latlon { lat = p.lat, lon = p.lon }; return data.ToList(); } public class latlon { public string lat { get; set; } public string lon { get; set; } }

Luego usando jquery accedemos al servicio, pasando esa variable.

// get latlon function getlatlon(propertyid) { var mydata; $.ajax({ url: "getData.asmx/GetLatLon", type: "POST", data: "{''id'': ''" + propertyid + "''}", async: false, contentType: "application/json;", dataType: "json", success: function (data, textStatus, jqXHR) { // mydata = data; }, error: function (xmlHttpRequest, textStatus, errorThrown) { console.log(xmlHttpRequest.responseText); console.log(textStatus); console.log(errorThrown); } }); return mydata; } // call the function with your data latlondata = getlatlon(id);

Y recibimos nuestra respuesta.

{"d":[{"__type":"MapData+latlon","lat":"40.7031420","lon":"-80.6047970}]}


Podría usar la clase JavaScriptSerializer ; consulte este artículo para crear un método de extensión útil.

Código del artículo:

namespace ExtensionMethods { public static class JSONHelper { public static string ToJSON(this object obj) { JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(obj); } public static string ToJSON(this object obj, int recursionDepth) { JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.RecursionLimit = recursionDepth; return serializer.Serialize(obj); } } }

Uso:

using ExtensionMethods; ... List<Person> people = new List<Person>{ new Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"}, new Person{ID = 2, FirstName = "Bill", LastName = "Gates"} }; string jsonString = people.ToJSON();


Si está intentando crear un servicio web para enviar datos a través de JSON a una página web, considere usar el kit de herramientas Ajax de ASP.NET:

http://www.asp.net/learn/ajax/tutorial-05-cs.aspx

Convertirá automáticamente sus objetos servidos a través de un servicio web a json y creará la clase de proxy que puede usar para conectarse a él.


Si necesita un resultado complejo (incrustado) cree su propia estructura:

class templateRequest { public String[] registration_ids; public Data data; public class Data { public String message; public String tickerText; public String contentTitle; public Data(String message, String tickerText, string contentTitle) { this.message = message; this.tickerText = tickerText; this.contentTitle = contentTitle; } }; }

y luego puede obtener la cadena JSON con la llamada

List<String> ids = new List<string>() { "id1", "id2" }; templateRequest request = new templeteRequest(); request.registration_ids = ids.ToArray(); request.data = new templateRequest.Data("Your message", "Your ticker", "Your content"); string json = new JavaScriptSerializer().Serialize(request);

El resultado será así:

json = "{/"registration_ids/":[/"id1/",/"id2/"],/"data/":{/"message/":/"Your message/",/"tickerText/":/"Your ticket/",/"contentTitle/":/"Your content/"}}"

¡Espero eso ayude!



También puedes probar mi ServiceStack JsonSerializer , es el serializador .NET JSON más rápido en este momento. Es compatible con la serialización de DataContracts, cualquier tipo de POCO, interfaces, objetos enlazados con retraso, incluidos los tipos anónimos, etc.

Ejemplo básico

var customer = new Customer { Name="Joe Bloggs", Age=31 }; var json = JsonSerializer.SerializeToString(customer); var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);

Nota: use Microsofts JavaScriptSerializer solo si el rendimiento no es importante para usted, ya que tuve que dejarlo fuera de mis puntos de referencia, ya que es hasta 40x-100x más lento que los otros serializadores JSON.


Usar Newtonsoft.Json hace realmente más fácil:

Product product = new Product(); product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Price = 3.99M; product.Sizes = new string[] { "Small", "Medium", "Large" }; string json = JsonConvert.SerializeObject(product);

Documentación: Serialización y Deserialización de JSON


Codificar el uso

Objeto simple para JSON Array EncodeJsObjectArray ()

public class dummyObject { public string fake { get; set; } public int id { get; set; } public dummyObject() { fake = "dummy"; id = 5; } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append(''[''); sb.Append(id); sb.Append('',''); sb.Append(JSONEncoders.EncodeJsString(fake)); sb.Append('']''); return sb.ToString(); } } dummyObject[] dummys = new dummyObject[2]; dummys[0] = new dummyObject(); dummys[1] = new dummyObject(); dummys[0].fake = "mike"; dummys[0].id = 29; string result = JSONEncoders.EncodeJsObjectArray(dummys);

Resultado: [[29, "mike"], [5, "dummy"]]

Bonito uso

Método de extensión de cadena Pretty Print JSON Array PrettyPrintJson ()

string input = "[14,4,[14,/"data/"],[[5,/"10.186.122.15/"],[6,/"10.186.122.16/"]]]"; string result = input.PrettyPrintJson();

Los resultados son:

[ 14, 4, [ 14, "data" ], [ [ 5, "10.186.122.15" ], [ 6, "10.186.122.16" ] ] ]