本文介绍了如何将 System.Text.JsonElement 漂亮地打印(格式化)到字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

用于将现有 JsonElement 格式化为格式化 JSON 字符串的 API 在哪里.ToString() API 不提供任何格式选项.

Where is the API to format an existing JsonElement to a formatted JSON string. The ToString() API does not provide any formatting options.

重新使用 Newtonsoft 很烦人

Falling back to using Newtonsoft is pretty annoying

Newtonsoft.Json.Linq.JValue
  .Parse(myJsonElement.GetRawText())
  .ToString(Newtonsoft.Json.Formatting.Indented)

推荐答案

您可以使用 并设置 JsonSerializerOptions.WriteIndented = true,例如在扩展方法中:

You can re-serialize your JsonElement with JsonSerializer and set JsonSerializerOptions.WriteIndented = true, e.g. in an extension method:

public static partial class JsonExtensions
{
    public static string ToString(this JsonElement element, bool indent)
        => element.ValueKind == JsonValueKind.Undefined ? "" : JsonSerializer.Serialize(element, new JsonSerializerOptions { WriteIndented = indent } );
}

然后做:

var indentedJson = myJsonElement.ToString(true)

注意事项:

  • 检查 JsonValueKind.Undefined 是为了避免使用默认(未初始化)JsonElement 结构体的异常;JsonElement.ToString() 不会为默认的 JsonElement 抛出异常,因此格式化版本也不会.

  • The check for JsonValueKind.Undefined is to avoid an exception with a default (uninitialized) JsonElement struct; JsonElement.ToString() does not throw for a default JsonElement so neither should the formatted version.

使用 Utf8JsonWriter 编写,同时设置 JsonWriterOptions.Indented 如其他答案所示也可以使用.

Writing using a Utf8JsonWriter while setting JsonWriterOptions.Indented as shown in the other answers will also work.

演示小提琴 此处.

这篇关于如何将 System.Text.JsonElement 漂亮地打印(格式化)到字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 20:04