Я использую анализатор .NET JSON и хотел бы сериализовать мой конфигурационный файл, чтобы он был читабельным. Так что вместо:
{"blah":"v", "blah2":"v2"}
Я хотел бы что-то более хорошее, как:
{
"blah":"v",
"blah2":"v2"
}
Мой код выглядит примерно так:
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
Стивен Кеннеди
источник
источник
Более короткий пример кода для библиотеки Json.Net
источник
Если у вас есть строка JSON и вы хотите ее «предварительно преобразовать», но не хотите сериализовать ее в известный тип C # и из него, то сработает следующее (с использованием JSON.NET):
источник
JsonPrettify("null")
иJsonPrettify("\"string\"")
Кратчайшая версия для предварительного кодирования существующего JSON: (редактировать: используя JSON.net)
Входные данные:
Вывод:
Чтобы красиво распечатать объект:
источник
JToken
вместоJObject
. Это работает с объектами или массивами, так какJToken
является классом предка для обоихJObject
иJArray
.Oneliner используя
Newtonsoft.Json.Linq
:источник
Вы можете использовать следующий стандартный метод для получения отформатированного Json
JsonReaderWriterFactory.CreateJsonWriter (Поток потока, кодировка кодирования, bool ownsStream, отступ bool, строка indentChars)
Только установить "отступ == правда"
Попробуйте что-то вроде этого
Обратите внимание на линии
Для некоторых видов xml-сериализаторов следует использовать InvariantCulture, чтобы избежать исключений при десериализации на компьютерах с различными региональными настройками. Например, неправильный формат double или DateTime иногда вызывают их.
Для десериализации
Спасибо!
источник
DataContractJsonSerializer
в сборкеSystem.Runtime.Serialization v.4.0.0.0
, нет явного использованияCurrentCulture
. Единственное использование культурыCultureInfo.InvariantCulture
в базовом классеXmlObjectSerializer
, внутренний методTryAddLineInfo
.Все это можно сделать в одну простую строку:
источник
Вот решение, использующее библиотеку Microsoft System.Text.Json :
источник
Сначала я хотел добавить комментарий под постом Дункан Смарт, но, к сожалению, у меня пока недостаточно репутации, чтобы оставлять комментарии. Поэтому я попробую это здесь.
Я просто хочу предупредить о побочных эффектах.
JsonTextReader внутренне анализирует json в типизированные JTokens и затем сериализует их обратно.
Например, если ваш оригинальный JSON был
После преттификации вы получаете
Конечно, обе строки json эквивалентны и будут десериализованы в структурно равные объекты, но если вам нужно сохранить исходные строковые значения, вам нужно принять это к сведению
источник
Используя
System.Text.Json
наборJsonSerializerOptions.WriteIndented = true
:источник
netcoreapp3.1
источник
Это сработало для меня. В случае, если кто-то ищет версию VB.NET.
источник
Ниже код работает для меня:
источник