Używam parsera .NET JSON i chciałbym serializować mój plik konfiguracyjny, aby był czytelny. Więc zamiast:
{"blah":"v", "blah2":"v2"}
Chciałbym coś ładniejszego:
{
"blah":"v",
"blah2":"v2"
}
Mój kod jest mniej więcej taki:
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
źródło
źródło
Krótszy przykładowy kod dla biblioteki Json.Net
źródło
Jeśli masz ciąg JSON i chcesz go „upiększać”, ale nie chcesz serializować go do znanego typu C #, a następnie wykonaj poniższe czynności (używając JSON.NET):
źródło
JsonPrettify("null")
orazJsonPrettify("\"string\"")
Najkrótsza wersja dla upiększenia istniejącego JSON: (edycja: za pomocą JSON.net)
Wejście:
Wynik:
Aby ładnie wydrukować obiekt:
źródło
JToken
zamiastJObject
. Działa to z obiektami lub tablicami, ponieważJToken
jest to klasa przodków zarówno dla, jakJObject
iJArray
.Oneliner używa
Newtonsoft.Json.Linq
:źródło
Możesz użyć następującej standardowej metody uzyskania sformatowanego Jsona
JsonReaderWriterFactory.CreateJsonWriter (strumień strumieniowy, kodowanie, bool ownsStream, wcięcie bool, wcięcie ciąguChars)
Ustaw tylko „wcięcie == prawda”
Spróbuj czegoś takiego
Zwróć uwagę na linie
W przypadku niektórych rodzajów serializatorów XML należy użyć InvariantCulture, aby uniknąć wyjątku podczas deserializacji na komputerach z różnymi ustawieniami regionalnymi. Na przykład niepoprawny format double lub DateTime czasami powoduje je .
Za deserializację
Dzięki!
źródło
DataContractJsonSerializer
w asemblerzeSystem.Runtime.Serialization v.4.0.0.0
, nie ma wyraźnego użyciaCurrentCulture
. Jedynym zastosowaniem kultury jestCultureInfo.InvariantCulture
klasa podstawowaXmlObjectSerializer
, metoda wewnętrznaTryAddLineInfo
.Wszystko to można zrobić w jednym prostym wierszu:
źródło
Oto rozwiązanie wykorzystujące bibliotekę Microsoft System.Text.Json :
źródło
Najpierw chciałem dodać komentarz pod postem Duncan Smart, ale niestety nie mam jeszcze wystarczającej reputacji, aby zostawić komentarz. Spróbuję tutaj.
Chcę tylko ostrzec o skutkach ubocznych.
JsonTextReader wewnętrznie analizuje json na wpisane JTokens, a następnie serializuje je z powrotem.
Na przykład, jeśli oryginalny JSON był
Po upiększeniu dostaniesz
Oczywiście oba ciągi JSON są równoważne i deserializują je do obiektów o równej strukturze, ale jeśli chcesz zachować oryginalne wartości ciągów, musisz wziąć to pod uwagę
źródło
Za pomocą
System.Text.Json
zestawuJsonSerializerOptions.WriteIndented = true
:źródło
netcoreapp3.1
źródło
To zadziałało dla mnie. W przypadku, gdy ktoś szuka wersji VB.NET.
źródło
Poniższy kod działa dla mnie:
źródło