问题描述
用于将现有 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 defaultJsonElement
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 漂亮地打印(格式化)到字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!