C# JsonDocument获取JSON字符串
我需要一个从JsonDocument获取JSON字符串的示例。我可以使用C# JsonDocument获取JSON字符串,c#,.net-core-3.0,C#,.net Core 3.0,我需要一个从JsonDocument获取JSON字符串的示例。我可以使用RootElement.GetProperty(“ItemName”)获取属性,然后调用.GetString(),但是找不到一种方法只将根元素作为JSON字符串获取 这里有一个例子: JsonDocument jdoc = JsonDocument.Parse("{\"a\":123}"); using(var stream = new MemoryStream()) { Utf8JsonWriter writer
RootElement.GetProperty(“ItemName”)
获取属性,然后调用.GetString()
,但是找不到一种方法只将根元素作为JSON字符串获取 这里有一个例子:
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());
}
}
然后像这样使用它:
JsonDocument jdoc = JsonDocument.Parse("{\"a\":123}");
string json = jdoc.ToJsonString();
官方文档中有两段代码片段,请参见
A. 以下示例显示如何从JsonDocument编写JSON:
(这里的代码段非常长)
上述代码:
- 读取JSON文件,将数据加载到JsonDocument,并将格式化(打印精美)的JSON写入文件
- 使用JsonDocumentOptions指定允许但忽略输入JSON中的注释
- 完成后,在编写器上刷新调用。另一种方法是让写入程序在释放时自动刷新
(…)
剪下的部分可以调整为使用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());
JsonDocument
(以及System.Text.Json
中的所有其他类)针对性能和最小分配进行了优化。将整个文档作为字符串获取将完全违背这一点,它唯一能做的就是将自身序列化为Utf8JsonWriter
。尽管如此,如果您真的想这样做,JsonSerializer.Serialize(document.RootElement)
似乎可以做到这一点。它实际上相当复杂?例如,假设JsonDocument很大,是否希望调试器自动呈现ToString()?假设有一些编码选项,或者您想将其完全写入字符串?你可能想把它打印出来(或者不打印)。有一百万和一个权衡需要考虑。