JsonDocument 获取 JSON 字符串

Jos*_*ury 13 c# .net-core-3.0

我需要一个从 JsonDocument 获取 JSON 字符串的示例。我可以获取属性RootElement.GetProperty("ItemName")然后调用,.GetString()但看不到将根元素作为 JSON 字符串获取的方法?

Alb*_*rto 16

这里有一个例子:

JsonDocument jdoc = JsonDocument.Parse("{\"a\":123}");

using(var stream = new MemoryStream())
{
    Utf8JsonWriter writer = new Utf8JsonWriter(stream, new JsonWriterOptions { Indented = true });
    jdoc.WriteTo(writer);
    writer.Flush();
    string json = Encoding.UTF8.GetString(stream.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

为了更容易使用,您可以将其放在扩展方法中,例如:

public static string ToJsonString(this JsonDocument jdoc)
{
    using (var stream = new MemoryStream())
    {
        Utf8JsonWriter writer = new Utf8JsonWriter(stream, new JsonWriterOptions { Indented = true });
        jdoc.WriteTo(writer);
        writer.Flush();
        return Encoding.UTF8.GetString(stream.ToArray());
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

JsonDocument jdoc = JsonDocument.Parse("{\"a\":123}");
string json = jdoc.ToJsonString();
Run Code Online (Sandbox Code Playgroud)

  • 其实很复杂?例如,假设 JsonDocument 很大,您是否希望调试器自动呈现 ToString() ?想象一下有一些编码选项,或者您想将其完全写入字符串?您可能想要漂亮地打印它(或不)。有一百万零一个权衡需要考虑。 (4认同)

小智 9

我使用 RootElement 获取 JsonElement,然后调用 .ToString()。

JsonDocument jdoc = JsonDocument.Parse("{\"a\":123}");
string json = jdoc.RootElement.ToString();
Run Code Online (Sandbox Code Playgroud)