using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public static partial class JsonExtensions
public static string JsonPrettify(string json, Formatting formatting = Formatting.Indented)
using (var stringReader = new StringReader(json))
using (var stringWriter = new StringWriter())
return JsonPrettify(stringReader, stringWriter, formatting).ToString();
public static TextWriter JsonPrettify(TextReader textReader, TextWriter textWriter, Formatting formatting = Formatting.Indented)
using (var jsonReader = new JsonTextReader(textReader) { DateParseHandling = DateParseHandling.None, CloseInput = false })
using (var jsonWriter = new JsonTextWriter(textWriter) { Formatting = formatting, CloseOutput = false })
jsonWriter.WriteToken(jsonReader);
public static void Test()
var json = @"{ ""val1"": ""\u003c=AA+ \u003e=AA-"", ""val2"": ""\\\/\""\b\n\r\t\u003c""}";
Console.WriteLine("Input JSON: {0}", json);
var unescapedJson = JsonExtensions.JsonPrettify(json, Formatting.None);
Console.WriteLine("\nUnescaped JSON: {0}", unescapedJson);
Console.WriteLine("\nUnescaping using System.Text.RegularExpressions.Regex.Unescape: ");
Console.WriteLine(System.Text.RegularExpressions.Regex.Unescape(json));
public static void Main()
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");