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