Estoy usando el analizador .NET JSON y me gustaría serializar mi archivo de configuración para que sea legible. Entonces en lugar de:
{"blah":"v", "blah2":"v2"}
Me gustaría algo más agradable como:
{
"blah":"v",
"blah2":"v2"
}
Mi código es algo como esto:
using System.Web.Script.Serialization;
var ser = new JavaScriptSerializer();
configSz = ser.Serialize(config);
using (var f = (TextWriter)File.CreateText(configFn))
{
f.WriteLine(configSz);
f.Close();
}
c#
.net
json
javascriptserializer
Stephen Kennedy
fuente
fuente
Un código de muestra más corto para la biblioteca Json.Net
fuente
Si tiene una cadena JSON y quiere "prettificarla", pero no quiere serializarla hacia y desde un tipo C # conocido, entonces lo siguiente hace el truco (usando JSON.NET):
fuente
JsonPrettify("null")
yJsonPrettify("\"string\"")
Versión más corta para embellecer JSON existente: (editar: usando JSON.net)
Entrada:
Salida:
Para imprimir un objeto bonito:
fuente
JToken
lugar deJObject
. Esto funciona con objetos o matrices, ya queJToken
es la clase ancestro para ambosJObject
yJArray
.Oneliner usando
Newtonsoft.Json.Linq
:fuente
Puede usar el siguiente método estándar para formatear Json
JsonReaderWriterFactory.CreateJsonWriter (Stream stream, codificación de codificación, bool poseeStream, bool indent, string indentChars)
Solo establezca "sangría == verdadero"
Intenta algo como esto
Presta atención a las líneas.
Para algunos tipos de serializadores xml, debe usar InvariantCulture para evitar excepciones durante la deserialización en las computadoras con diferentes configuraciones regionales. Por ejemplo, formato no válido de double o DateTime veces los causa.
Para deserializar
¡Gracias!
fuente
DataContractJsonSerializer
en ensambladoSystem.Runtime.Serialization v.4.0.0.0
, no hay un uso explícito deCurrentCulture
. El único uso de una cultura esCultureInfo.InvariantCulture
en la clase baseXmlObjectSerializer
, método internoTryAddLineInfo
.Todo esto se puede hacer en una línea simple:
fuente
Aquí hay una solución usando la biblioteca System.Text.Json de Microsoft :
fuente
Primero quería agregar comentarios en la publicación Duncan Smart, pero desafortunadamente aún no tengo suficiente reputación para dejar comentarios. Así que lo intentaré aquí.
Solo quiero advertir sobre los efectos secundarios.
JsonTextReader analiza internamente json en JTokens mecanografiados y luego los serializa de nuevo.
Por ejemplo, si su JSON original era
Después de prettify obtienes
Por supuesto, ambas cadenas json son equivalentes y se deserializarán a objetos estructuralmente iguales, pero si necesita preservar los valores de cadena originales, debe tener esto en cuenta
fuente
Usando
System.Text.Json
setJsonSerializerOptions.WriteIndented = true
:fuente
netcoreapp3.1
fuente
Esto funcionó para mí. En caso de que alguien esté buscando una versión VB.NET.
fuente
El siguiente código funciona para mí:
fuente