详解.NET Core 3.0 里新的JSON API

2020-03-17 14:02:55于丽

JsonDocument 可以处理 Span ,也可以处理 Stream 。  

例子:

这里我通过 File .OpenRead 把 json 文件转化为 stream 。然后使用 Json Document.Parse 方法把 stream 解析成 JSON 文档对象模型。  

注意,这里我使用了 C# 8 的 using var 语法,这个以后再说。  

下面我们开始从这个 JSON 文档对象模型的根节点开始遍历,也就是 RootElement :  

然后通过 root 这个 JsonElement 类型的对象的 GetProperty 方法来获得相应的属性,而且这个方法可以连串使用:  

最后一行使用 GetString 方法来获得该属性的字符串值。  

然后我们可以写一个递归调用的方法来遍历整个模型的每个属性:

这个方法接受 JsonElement 类型的对象,然后对该元素的属性进行循环。  

如果当前属性是另一个对象,那么就继续递归调用这个方法;

否则就输出原始的文本。

最后调用该方法:

输出结果为:

与json文件的内容匹配。

Utf8JsonWriter 类  

下面研究一下如何写入json文件。这里需要使用Utf 8JsonWriter 类。  

直接看代码:

这个类需要传递的参数类型是 Stream 或者Buffer,也就是向 Stream 或 Buffer 里面写入数据。  

那么就提供一个 buffer :  

下面单独写一个方法,来生成json数据:

参数类型是Utf 8JsonWriter 。通过智能提示可以看到它提供了很多用于写入不同类型数据的方法。  

写 JSON 对象  

现在我想写一个json对象,那么就从Write StartObject () 开始,然后以WriteEnd Object() 结束 :  

这样的话,实际上我已经拥有了一个合法的json文档。

写属性和值  

可以分开写属性和值: