Estou usando o analisador .NET JSON e gostaria de serializar meu arquivo de configuração para que fique legível. Então, em vez de:
{"blah":"v", "blah2":"v2"}
Eu gostaria de algo mais agradável como:
{
"blah":"v",
"blah2":"v2"
}
Meu código é algo como isto:
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
fonte
fonte
Um código de amostra mais curto para a biblioteca Json.Net
fonte
Se você possui uma cadeia de caracteres JSON e deseja "prettificá-la", mas não deseja serializá-la de e para um tipo C # conhecido, o seguinte é o seguinte (usando JSON.NET):
fonte
JsonPrettify("null")
eJsonPrettify("\"string\"")
Versão mais curta para pretextar o JSON existente: (editar: usando JSON.net)
Entrada:
Resultado:
Para imprimir bonito um objeto:
fonte
JToken
vez deJObject
. Isso funciona com objetos ou matrizes, já queJToken
é a classe ancestral de ambosJObject
eJArray
.Oneliner usando
Newtonsoft.Json.Linq
:fonte
Você pode usar o seguinte método padrão para obter o formato Json
JsonReaderWriterFactory.CreateJsonWriter (Fluxo de fluxo, codificação de codificação, bool ownsStream, indent bool, string indentChars)
Defina apenas "indent == true"
Tente algo como isto
Preste atenção nas linhas
Para alguns tipos de serializadores xml, você deve usar InvariantCulture para evitar exceções durante a desserialização nos computadores com configurações regionais diferentes. Por exemplo, o formato inválido de double ou DateTime às vezes os causa.
Para desserialização
Obrigado!
fonte
DataContractJsonSerializer
na montagemSystem.Runtime.Serialization v.4.0.0.0
, não há uso explícito deCurrentCulture
. O único uso de uma cultura éCultureInfo.InvariantCulture
na classe baseXmlObjectSerializer
, método internoTryAddLineInfo
.Tudo isso pode ser feito em uma linha simples:
fonte
Aqui está uma solução usando a biblioteca System.Text.Json da Microsoft :
fonte
Primeiro, eu queria adicionar um comentário no post de Duncan Smart, mas infelizmente ainda não tenho reputação suficiente para deixar comentários. Então, eu vou tentar aqui.
Eu só quero avisar sobre efeitos colaterais.
O JsonTextReader analisa internamente o json nos JTokens digitados e os serializa de volta.
Por exemplo, se o seu JSON original foi
Depois de fingir que você começa
É claro que ambas as strings json são equivalentes e desserializam para objetos estruturalmente iguais, mas se você precisar preservar os valores originais das strings, precisará levar isso em consideração
fonte
Usando o
System.Text.Json
conjuntoJsonSerializerOptions.WriteIndented = true
:fonte
netcoreapp3.1
fonte
Isso funcionou para mim. Caso alguém esteja procurando uma versão do VB.NET.
fonte
O código abaixo funciona para mim:
fonte