J'utilise l'analyseur .NET JSON et je souhaite sérialiser mon fichier de configuration afin qu'il soit lisible. Donc au lieu de:
{"blah":"v", "blah2":"v2"}
J'aimerais quelque chose de plus agréable comme:
{
"blah":"v",
"blah2":"v2"
}
Mon code est quelque chose comme ceci:
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
la source
la source
Un exemple de code plus court pour la bibliothèque Json.Net
la source
Si vous avez une chaîne JSON et que vous voulez la "raffiner", mais que vous ne voulez pas la sérialiser vers et depuis un type C # connu, alors ce qui suit fait l'affaire (en utilisant JSON.NET):
la source
JsonPrettify("null")
etJsonPrettify("\"string\"")
Version la plus courte pour embellir le JSON existant: (modifier: en utilisant JSON.net)
Contribution:
Production:
Pour imprimer joliment un objet:
la source
JToken
place deJObject
. Cela fonctionne avec des objets ou des tableaux, puisqueJToken
c'est la classe ancêtre pour les deuxJObject
etJArray
.Oneliner utilisant
Newtonsoft.Json.Linq
:la source
Vous pouvez utiliser la méthode standard suivante pour obtenir Json formaté
JsonReaderWriterFactory.CreateJsonWriter (Stream stream, Encoding encoding, bool ownsStream, bool indent, string indentChars)
Définissez uniquement "indent == true"
Essayez quelque chose comme ça
Faites attention aux lignes
Pour certains types de sérialiseurs xml, vous devez utiliser InvariantCulture pour éviter les exceptions pendant la désérialisation sur les ordinateurs avec différents paramètres régionaux. Par exemple, un format non valide de double ou DateTime les provoque parfois.
Pour désérialiser
Merci!
la source
DataContractJsonSerializer
en assemblageSystem.Runtime.Serialization v.4.0.0.0
, il n'y a pas d'utilisation explicite deCurrentCulture
. La seule utilisation d'une culture estCultureInfo.InvariantCulture
dans la classe de baseXmlObjectSerializer
, méthode interneTryAddLineInfo
.Tout cela peut se faire en une seule ligne:
la source
Voici une solution utilisant la bibliothèque System.Text.Json de Microsoft :
la source
J'ai d'abord voulu ajouter un commentaire sous Duncan Smart Post, mais malheureusement je n'ai pas encore assez de réputation pour laisser des commentaires. Je vais donc l'essayer ici.
Je veux juste mettre en garde contre les effets secondaires.
JsonTextReader analyse en interne json en JTokens typés puis les sérialise.
Par exemple, si votre JSON d'origine était
Après avoir joliment vous obtenez
Bien sûr, les deux chaînes json sont équivalentes et se désérialisent en objets structurellement égaux, mais si vous devez conserver les valeurs de chaîne d'origine, vous devez prendre cela en considération.
la source
Utilisation de l'
System.Text.Json
ensembleJsonSerializerOptions.WriteIndented = true
:la source
netcoreapp3.1
la source
Cela a fonctionné pour moi. Dans le cas où quelqu'un cherche une version VB.NET.
la source
Le code ci-dessous fonctionne pour moi:
la source