如何美化JSON以便在TextBox中显示?

Ste*_*fan 36 c# json

如何用C#美化JSON?我想在TextBox控件中打印结果.

是否可以使用JavaScriptSerializer,或者我应该使用JSON.net?除非我必须这样做,否则我想避免反序列化字符串.

alo*_*ica 37

使用JSON.Net,您可以使用特定格式美化输出.

在dotnetfiddle上演示.

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);
}
Run Code Online (Sandbox Code Playgroud)

产量

{"Name":"Apple","Expiry":"2008-12-28T00:00:00","Sizes":["Small"]}
{
  "Name": "Apple",
  "Expiry": "2008-12-28T00:00:00",
  "Sizes": [
    "Small"
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 我假设为什么没有被接受作为答案是因为,使用这种方法美化JSON需要在重新序列化之前首先进行反序列化? (3认同)

stu*_*rtd 24

这个派对迟到了,但你可以使用json.NET美化(或缩小)Json而不反序列化:

JToken parsedJson = JToken.Parse(jsonString);
var beautified = parsedJson.ToString(Formatting.Indented);
var minified = parsedJson.ToString(Formatting.None);
Run Code Online (Sandbox Code Playgroud)


Red*_*att 6

您可以使用新的 System.Text.Json 命名空间处理 JSON,而无需反序列化,以避免添加对 json.NET 的依赖项。诚然,这不像斯图尔特的简单答案那么简洁:

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());
}
Run Code Online (Sandbox Code Playgroud)

该文档提供了更多有关如何在命名空间中使用低级类型的示例。