una serialize serializar recorrer newtonsoft library leer jsonconvert consumir como cadena c# asp.net json

serialize - recorrer json c#



Serializar una lista a JSON (5)

Tengo un modelo de objetos que se ve así:

public MyObjectInJson { public long ObjectID {get;set;} public string ObjectInJson {get;set;} }

La propiedad ObjectInJson es una versión ya serializada de un objeto que contiene listas anidadas. Por el momento, estoy serializando la lista de MyObjectInJson manualmente de esta manera:

StringBuilder TheListBuilder = new StringBuilder(); TheListBuilder.Append("["); int TheCounter = 0; foreach (MyObjectInJson TheObject in TheList) { TheCounter++; TheListBuilder.Append(TheObject.ObjectInJson); if (TheCounter != TheList.Count()) { TheListBuilder.Append(","); } } TheListBuilder.Append("]"); return TheListBuilder.ToString();

Me pregunto si puedo reemplazar este tipo de código peligroso con JavascriptSerializer y obtener los mismos resultados. ¿Cómo haría esto?

Gracias.


.NET ya admite la serialización Json básica a través del espacio de nombres System.Runtime.Serialization.Json y la clase DataContractJsonSerializer desde la versión 3.5. Como su nombre lo indica, DataContractJsonSerializer tiene en cuenta cualquier anotación de datos que agregue a sus objetos para crear la salida final de Json.

Esto puede ser útil si ya tiene clases de datos anotados que desea serializar a Json en una secuencia, como se describe en Cómo: Serializar y deserializar datos JSON . Existen limitaciones, pero son lo suficientemente buenas y rápidas si tiene necesidades básicas y no desea agregar aún otra biblioteca a su proyecto.

El siguiente código serializa una lista para el flujo de salida de la consola. Como ve, es un poco más detallado que Json.NET y no es seguro para tipos (es decir, no es genérico)

var list = new List<string> {"a", "b", "c", "d"}; using(var output = Console.OpenStandardOutput()) { var writer = new DataContractJsonSerializer(typeof (List<string>)); writer.WriteObject(output,list); }

Por otro lado, Json.NET proporciona un control mucho mejor sobre cómo generar Json. Esto será MUY útil cuando tengas que asignar nombres de nombres compatibles con JavaScript a clases .NET, formatear fechas para json, etc.

Otra opción es ServiceStack.Text , parte de ServicStack ... stack, que proporciona un conjunto de serializadores muy rápidos para Json, JSV y CSV.


Hay dos formas comunes de hacerlo con los serializadores JSON incorporados:

  1. JavaScriptSerializer

    var serializer = new JavaScriptSerializer(); return serializer.Serialize(TheList);

  2. DataContractJsonSerializer

    var serializer = new DataContractJsonSerializer(TheList.GetType()); using (var stream = new MemoryStream()) { serializer.WriteObject(stream, TheList); using (var sr = new StreamReader(stream)) { return sr.ReadToEnd(); } }

    Tenga en cuenta que esta opción requiere la definición de un contrato de datos para su clase:

    [DataContract] public class MyObjectInJson { [DataMember] public long ObjectID {get;set;} [DataMember] public string ObjectInJson {get;set;} }


También puedes usar Json.NET. Simplemente descárguelo en http://james.newtonking.com/pages/json-net.aspx , extraiga el archivo comprimido y agréguelo como referencia.

A continuación, solo serialice la lista (o el objeto que desee) con lo siguiente:

using Newtonsoft.Json; string json = JsonConvert.SerializeObject(listTop10);

Actualización: también puede agregarlo a su proyecto a través del Administrador de paquetes NuGet (Herramientas -> Administrador de paquetes NuGet -> Consola de Administrador de paquetes):

PM> Install-Package Newtonsoft.Json

Documentación: serialización de colecciones


// you need to reference System.Web.Extensions using System.Web.Script.Serialization; var jsonSerialiser = new JavaScriptSerializer(); var json = jsonSerialiser.Serialize(aList);

Tenga en cuenta:

Los tiempos han cambiado, usaría JSON.Net como mi primera opción JSON Parser. Si es la elección correcta para WebAPI, es la opción correcta para mí.

p.ej

using Newtonsoft.Json; var json = JsonConvert.SerializeObject(aList);

Es posible que deba instalar el paquete primero.

PM> Install-Package Newtonsoft.Json

Para obtener más detalles, vea y resuma la respuesta que es la fuente de esta información .


public static string JSONSerialize<T>(T obj) { string retVal = String.Empty; using (MemoryStream ms = new MemoryStream()) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); serializer.WriteObject(ms, obj); var byteArray = ms.ToArray(); retVal = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length); } return retVal; }