Ich verwende den .NET JSON-Parser und möchte meine Konfigurationsdatei serialisieren, damit sie lesbar ist. Also statt:
{"blah":"v", "blah2":"v2"}
Ich hätte gerne etwas Schöneres wie:
{
"blah":"v",
"blah2":"v2"
}
Mein Code ist ungefähr so:
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
quelle
quelle
Ein kürzerer Beispielcode für die Json.Net-Bibliothek
quelle
Wenn Sie eine JSON-Zeichenfolge haben und diese "verschönern" möchten, diese aber nicht zu und von einem bekannten C # -Typ serialisieren möchten, reicht Folgendes aus (mithilfe von JSON.NET):
quelle
JsonPrettify("null")
JsonPrettify("\"string\"")
Kürzeste Version, um vorhandenes JSON zu verschönern: (Bearbeiten: Verwenden von JSON.net)
Eingang:
Ausgabe:
So drucken Sie ein Objekt hübsch aus:
quelle
JToken
anstelle von zu verwendenJObject
. Dies funktioniert mit Objekten oder Arrays, da diesJToken
die Vorgängerklasse fürJObject
und istJArray
.Oneliner mit
Newtonsoft.Json.Linq
:quelle
Sie können die folgende Standardmethode verwenden, um Json zu formatieren
JsonReaderWriterFactory.CreateJsonWriter (Stream-Stream, Codierungscodierung, bool ownStream, bool indent, string indentChars)
Setzen Sie nur "indent == true"
Versuchen Sie so etwas
Achten Sie auf Linien
Für einige Arten von XML-Serialisierern sollten Sie InvariantCulture verwenden , um Ausnahmen während der Deserialisierung auf Computern mit unterschiedlichen regionalen Einstellungen zu vermeiden. Zum Beispiel ungültiges Format von double oder DateTime manchmal diese.
Zum Deserialisieren
Vielen Dank!
quelle
DataContractJsonSerializer
in Assembly dekompiliertSystem.Runtime.Serialization v.4.0.0.0
, es gibt keine explizite Verwendung vonCurrentCulture
. Die einzige Verwendung einer Kultur istCultureInfo.InvariantCulture
dieXmlObjectSerializer
interne Methode der BasisklasseTryAddLineInfo
.All dies kann in einer einfachen Zeile erfolgen:
quelle
Hier ist eine Lösung mit der System.Text.Json- Bibliothek von Microsoft :
quelle
Zuerst wollte ich einen Kommentar unter Duncan Smart hinzufügen, aber leider habe ich noch nicht genug Ruf, um Kommentare zu hinterlassen. Also werde ich es hier versuchen.
Ich möchte nur vor Nebenwirkungen warnen.
JsonTextReader analysiert json intern in typisierte JTokens und serialisiert sie dann zurück.
Zum Beispiel, wenn Ihr ursprünglicher JSON war
Nach dem Verschönern bekommst du
Natürlich sind beide JSON-Zeichenfolgen gleichwertig und werden deserialisiert, um strukturell gleiche Objekte zu erhalten. Wenn Sie jedoch die ursprünglichen Zeichenfolgenwerte beibehalten müssen, müssen Sie dies berücksichtigen
quelle
Mit
System.Text.Json
setJsonSerializerOptions.WriteIndented = true
:quelle
netcoreapp3.1
quelle
Das hat bei mir funktioniert. Für den Fall, dass jemand nach einer VB.NET-Version sucht.
quelle
Der folgende Code funktioniert für mich:
quelle