JsonDocument获取JSON字符串

时间:2019-10-14 13:59:58

标签: c# .net-core-3.0

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

2 个答案:

答案 0 :(得分:1)

这里有个例子:

this.className = (this.className != 'selected') ? 'unselected' : 'selected';

为便于使用,您可以将其放在扩展方法中,例如:

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());
}

并像这样使用它:

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());
    }
}

答案 1 :(得分:0)

为记录起见,{@ 3}}的官方doco中有2个代码段


A。 How to serialize and deserialize (marshal and unmarshal) JSON in .NET

以下示例显示如何从JsonDocument写入JSON:

(surprisingly long code snippet here)

前面的代码:

  • 读取JSON文件,将数据加载到JsonDocument中,然后将格式化(漂亮打印)的JSON写入文件中。
  • 使用JsonDocumentOptions指定允许但忽略输入JSON中的注释。
  • 完成后,在编写器上调用Flush。另一种选择是让编写器在处理后自动刷新。

B。 Use JsonDocument to write JSON

下面的示例演示如何使用Utf8JsonWriter类:

(...)

已调整的片段可以使用JsonDocument.Parse

using var stream = new System.IO.MemoryStream();
using (var writer = new Utf8JsonWriter(stream, new JsonWriterOptions { Indented = true }))
{
   var jsonDocument = JsonDocument.Parse(content);
   jsonDocument.WriteTo(writer);
}

var formatted = System.Text.Encoding.UTF8.GetString(stream.ToArray());