How can I beautify JSON with C#? I want to print the result in a TextBox control.
Is it possible to use JavaScriptSerializer for this, or should I use JSON.net? Unless I have to, I'd like to avoid deserializing the string.
How can I beautify JSON with C#? I want to print the result in a TextBox control.
Is it possible to use JavaScriptSerializer for this, or should I use JSON.net? Unless I have to, I'd like to avoid deserializing the string.
Bit late to this party, but you can beautify (or minify) Json without deserialization using Json.NET:
JToken parsedJson = JToken.Parse(jsonString);
var beautified = parsedJson.ToString(Formatting.Indented);
var minified = parsedJson.ToString(Formatting.None);
Edit: following up on the discussion in the comments about performance, I measured using BenchMark.Net and there is an extra allocation cost using JToken.Parse, and a very small increase in time taken:
 
    
    With JSON.Net you can beautify the output with a specific formatting.
Demo on dotnetfiddle.
Code
public class Product
{
    public string Name {get; set;}
    public DateTime Expiry {get; set;}
    public string[] Sizes {get; set;}
}
public void Main()
{
    Product product = new Product();
    product.Name = "Apple";
    product.Expiry = new DateTime(2008, 12, 28);
    product.Sizes = new string[] { "Small" };
    string json = JsonConvert.SerializeObject(product, Formatting.None);
    Console.WriteLine(json);
    json = JsonConvert.SerializeObject(product, Formatting.Indented);
    Console.WriteLine(json);
}
Output
{"Name":"Apple","Expiry":"2008-12-28T00:00:00","Sizes":["Small"]}
{
  "Name": "Apple",
  "Expiry": "2008-12-28T00:00:00",
  "Sizes": [
    "Small"
  ]
}
 
    
    You can process JSON without deserializing using the new System.Text.Json namespace, to avoid adding a dependency on json.NET. This is admittedly not as terse as stuartd's simple answer:
using System.IO;
using System.Text;
using System.Text.Json;
public static string BeautifyJson(string json)
{
    using JsonDocument document = JsonDocument.Parse(json);
    using var stream = new MemoryStream();
    using var writer = new Utf8JsonWriter(stream, new JsonWriterOptions() { Indented = true });
    document.WriteTo(writer);
    writer.Flush();
    return Encoding.UTF8.GetString(stream.ToArray());
}
The docs have more examples of how to use the low-level types in the namespace.
 
    
    ShouldSerializeContractResolver.cs
public class ShouldSerializeContractResolver : DefaultContractResolver
    {
        public static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver();
        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            JsonProperty property = base.CreateProperty(member, memberSerialization);
            return property;
        }
    }
 var beautifyJson= Newtonsoft.Json.JsonConvert.SerializeObject(data, new JsonSerializerSettings()
            {
                ContractResolver = ShouldSerializeContractResolver.Instance,
                NullValueHandling = NullValueHandling.Ignore,
                Formatting = Formatting.Indented
            });
you can beautify json with above code
 
    
    string formattedJson = System.Text.Json.Nodes.JsonNode.Parse(json).ToString();
 
    
    There are 2 well-known JSON formatter or parsers to serialize:
using Newtonsoft.Json;
dynamic parsedJson = JsonConvert.DeserializeObject(unPrettyJson);
var prettyJson = JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
using System.Text.Json;
var jsonElement = JsonSerializer.Deserialize<JsonElement>(unPrettyJson);
var prettyJson = JsonSerializer.Serialize(jsonElement , new JsonSerializerOptions { WriteIndented = true });
