Tengo un modelo de objeto 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, un objeto que contiene listas anidadas. Por el momento, estoy serializando la lista de forma MyObjectInJson
manual 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 JavascriptSerializer
y obtener los mismos resultados. ¿Cómo haría esto?
Gracias.
System.Web.Extensions
para usarSystem.Web.Script.Serialization
: stackoverflow.com/a/18746092/1599699 stackoverflow.com/a/19299695/1599699Respuestas:
Si usa .Net Core 3.0 o posterior;
Valor predeterminado para usar la
System.Text.Json
implementación del analizador incorporado .p.ej
alternativamente, hay otras opciones menos convencionales disponibles, como el analizador Utf8Json y Jil : pueden ofrecer un rendimiento superior , si realmente lo necesita, pero deberá instalar sus respectivos paquetes.
Si se atasca usando .Net Core 2.2 o anterior;
Predeterminado para usar Newtonsoft JSON.Net como su primer analizador JSON.
p.ej
Es posible que primero deba instalar el paquete.
Para obtener más detalles, consulte y vote a favor la respuesta que es la fuente de esta información .
Solo como referencia, esta fue la respuesta original, hace muchos años;
fuente
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.
Luego, solo serialice la lista (o el objeto que desee) con lo siguiente:
Actualización: también puede agregarlo a su proyecto a través del Administrador de paquetes NuGet (Herramientas -> Administrador de paquetes NuGet -> Consola del Administrador de paquetes):
Documentación: Serialización de colecciones
fuente
Hay dos formas comunes de hacerlo con los serializadores JSON integrados:
JavaScriptSerializer
DataContractJsonSerializer
Tenga en cuenta que esta opción requiere la definición de un contrato de datos para su clase:
fuente
fuente
.NET ya admite la serialización básica de Json 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.
Eso puede ser útil si ya ha anotado clases de datos que desea serializar Json en una secuencia, como se describe en Cómo: Serializar y deserializar datos JSON . Existen limitaciones, pero es lo suficientemente bueno y rápido si tiene necesidades básicas y no desea agregar Yet Another Library a su proyecto.
El siguiente código serializa una lista a la secuencia de salida de la consola. Como puede ver, es un poco más detallado que Json.NET y no es seguro para escribir (es decir, no genéricos)
Por otro lado, Json.NET proporciona un control mucho mejor sobre cómo generar Json. Esto será MUY útil cuando tenga que asignar nombres de nombres compatibles con javascript a clases .NET, formatear fechas a json, etc.
Otra opción es ServiceStack.Text , parte de la pila ServicStack ..., que proporciona un conjunto de serializadores muy rápidos para Json, JSV y CSV.
fuente
basándose en una respuesta de otra publicación. Se me ocurrió una forma más genérica de crear una lista, utilizando la recuperación dinámica con Json.NET versión 12.x
llamar para procesar
o esta llamada para procesar
fuente