serialize - serializar y deserializar json c#
Forma de deserializar JSON desde HttpWebResponse sin marcos de terceros (1)
Estoy tratando de no depender de bibliotecas de código abierto o de terceros como Json.NET para analizar el JSON entrante desde una HttpWebResponse. ¿Por qué? Debido a que cuanto más dependa de los marcos de código abierto para ayudar en sus implementaciones, más dependerá su aplicación de esas dependencias ... No me gusta que mis aplicaciones dependan de muchas bibliotecas si es posible. Estoy de acuerdo con el uso de cosas como Enterprise Library porque es compatible con MS pero estoy tomando más librerías de código abierto.
De todos modos, estoy tratando de descubrir la mejor manera de analizar el servidor JSON entrante en .NET 3.5.
Sé que esto va a recibir muchas respuestas e incluso he usado el .NET 3.5 JavaScriptSerializer para serializar datos en JSON, pero ahora estoy tratando de descubrir la mejor y más simple manera de hacer el proceso inverso sin tener que volver a tenerlos. utilizar un marco de terceros / código abierto para ayudar en esto.
El serializador JSON recomendado por Microsoft es DataContractJsonSerializer
Esta clase existe dentro del ensamblado System.Runtime.Serialization .
El ejemplo demuestra la deserialización de datos JSON en un objeto.
MemoryStream stream1 = new MemoryStream();
Person p2 = (Person)ser.ReadObject(stream1);
Para serializar una instancia del tipo Persona en JSON, primero cree el DataContractJsonSerializer y utilice el método WriteObject para escribir datos JSON en una secuencia.
Person p = new Person();
//Set up Person object...
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream1, p);
Actualización: clase de Ayuda añadida
Aquí hay una clase de ayuda de ejemplo que puede usar para la serialización To / From Json simple:
public static class JsonHelper
{
public static string ToJson<T>(T instance)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var tempStream = new MemoryStream())
{
serializer.WriteObject(tempStream, instance);
return Encoding.Default.GetString(tempStream.ToArray());
}
}
public static T FromJson<T>(string json)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var tempStream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
return (T)serializer.ReadObject(tempStream);
}
}
}