本文介绍了如何将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)


推荐答案

您可以使用|JsonElement .json.jsonserializer?view = netcore-3.1 rel = nofollow noreferrer> JsonSerializer 并设置,例如在扩展方法中:

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的支票。未定义可以避免使用默认(未初始化) JsonElement 结构的异常; 不会为默认的 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 进行书写,同时设置

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

演示小提琴。

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

10-29 20:04