Json.NET исключает последовательности Unicode внутри JsonTextReader
, поэтому вы можете принять тот же подход, который используется в в этом ответе до Как получить отформатированный JSON в .NET с помощью C #? от Duncan Smart для переформатирования вашего JSON без ненужного экранирования путем потоковой передачи непосредственно с JsonTextReader
на JsonTextWriter
с использованием JsonWriter.WriteToken(JsonReader)
:
public static partial class JsonExtensions
{
// Adapted from this answer https://stackoverflow.com/a/30329731
// To https://stackoverflow.com/q/2661063
// By Duncan Smart https://stackoverflow.com/users/1278/duncan-smart
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)
{
// Let caller who allocated the the incoming readers and writers dispose them also
// Disable date recognition since we're just reformatting
using (var jsonReader = new JsonTextReader(textReader) { DateParseHandling = DateParseHandling.None, CloseInput = false })
using (var jsonWriter = new JsonTextWriter(textWriter) { Formatting = formatting, CloseOutput = false })
{
jsonWriter.WriteToken(jsonReader);
}
return textWriter;
}
}
Используя этот метод, следующий код:
var json = @"{ ""val1"": ""\u003c=AA+ \u003e=AA-""}";
var unescapedJson = JsonExtensions.JsonPrettify(json, Formatting.None);
Console.WriteLine("Unescaped JSON: {0}", unescapedJson);
Выходы
Unescaped JSON: {"val1":"<=AA+ >=AA-"}
Демонстрационная скрипка здесь .