91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Core 3.0 里新的JSON API是什么

發布時間:2021-06-04 19:01:14 來源:億速云 閱讀:169 作者:小新 欄目:開發技術

這篇文章主要介紹.NET Core 3.0 里新的JSON API是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

為什么需要新的 JSON API ?

JSON.NET  大家都用過,老版本的 ASP.NET Core 也依賴于 JSON.NET 。  

然而這個依賴就會引起一些版本問題:例如 ASP .NET  Core某個版本需要使用 JSON .NET  v10 ,而另一個庫需要使用 JSON.NET  v11 ;或者 JSON .NET   出現了一個新版本,而ASP .NET Core 還不能支持這個版本,而您卻想使用該版本。  

System.Text.Json  

隨著 NET Core  3.0 的出現,出現了 System .Text.Json 命名空間和它下面一些用于處理 JSON 的類。  

特點

這個內置 JSON API 具有與生俱來的高性能、地分配的特點:  

JSON .NET  使用 .NET  里面的字符串作為基本數據類型,其實也就是 UTF16 ,而 .NET Core 中新的 JSON  API 直接使用數據原始的 UTF8 格式。  

新的 JSON API 基于 Span <byte> 這個數據類型來進行操作 JSON 數據,從而具有低分配的特點,這就可以極大的改善吞吐量和內存使用情況。  

但是新的JSON API 的特性還不那么豐富,有一些 JSON .NET 具有的特性都還不支持。  

例子  

隨便找了一個 JSON 示例文件:  

.NET Core 3.0 里新的JSON API是什么

針對這個文件,需要修改一下它的屬性:

.NET Core 3.0 里新的JSON API是什么

Utf8JsonReader  

先使用   Utf8JsonReader  來讀取JSON文件。  

Utf8JsonReader   并不會讀取文件或者 stream ,它會讀取Span數據類型。  

直接上代碼:

.NET Core 3.0 里新的JSON API是什么

Main方法里面,我們使用 File .ReadAllBytes 從 sample .json 文件讀取數格式為 byte[] ,然后通過 AsSpan 這個擴展方法將其轉化為 Span <byte> 數據類型,然后把它傳遞到   Utf8JsonReader  的構造函數來創建一個JSON的 reader 。  

接下來使用while循環對JSON數據的每個 Token 進行讀取,每次執行 Read() 方法時, reader 就會移動到 JSON 數據里面的下一個 Token 那里。  

Token 分成幾種類型, GetToken Info 方法就是判斷一下 Token 的類型,并返回一些描述性信息,這里面應該是包含了所有的類型。這里面使用到了C#  8  的  switch  表達式。  

運行程序

結果如下:

.NET Core 3.0 里新的JSON API是什么

可以看到 sample.json 文件里面的每個 Token 都被正確的顯示了。  

Json Document 類  

Json Document 是基于 Utf8JsonReader  構建的 。 JsonDocument  可分析  JSON  數據并生成只讀文檔對象模型  (DOM) ,可對模型進行查詢,以支持隨機訪問和枚舉。使用  JsonDocument  分析常規  JSON  有效負載并訪問其所有成員比使用  Json.NET  快  2-3  倍,且為合理大小(即  < 1 MB )的數據所分配的量非常少。  

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

例子:

.NET Core 3.0 里新的JSON API是什么

這里我通過 File .OpenRead 把 json 文件轉化為 stream 。然后使用 Json Document.Parse 方法把 stream 解析成 JSON 文檔對象模型。  

注意,這里我使用了 C# 8 的 using var 語法,這個以后再說。  

下面我們開始從這個 JSON 文檔對象模型的根節點開始遍歷,也就是 RootElement :  

.NET Core 3.0 里新的JSON API是什么

然后通過 root 這個 JsonElement 類型的對象的 GetProperty 方法來獲得相應的屬性,而且這個方法可以連串使用:  

.NET Core 3.0 里新的JSON API是什么

最后一行使用 GetString 方法來獲得該屬性的字符串值。  

然后我們可以寫一個遞歸調用的方法來遍歷整個模型的每個屬性:

.NET Core 3.0 里新的JSON API是什么

這個方法接受 JsonElement 類型的對象,然后對該元素的屬性進行循環。  

如果當前屬性是另一個對象,那么就繼續遞歸調用這個方法;

否則就輸出原始的文本。

最后調用該方法:

.NET Core 3.0 里新的JSON API是什么

輸出結果為:

.NET Core 3.0 里新的JSON API是什么

與json文件的內容匹配。

Utf8JsonWriter 類  

下面研究一下如何寫入json文件。這里需要使用Utf 8JsonWriter 類。  

直接看代碼:

.NET Core 3.0 里新的JSON API是什么

這個類需要傳遞的參數類型是 Stream 或者Buffer,也就是向 Stream 或 Buffer 里面寫入數據。  

那么就提供一個 buffer :  

.NET Core 3.0 里新的JSON API是什么

下面單獨寫一個方法,來生成json數據:

.NET Core 3.0 里新的JSON API是什么

參數類型是Utf 8JsonWriter 。通過智能提示可以看到它提供了很多用于寫入不同類型數據的方法。  

寫 JSON 對象  

現在我想寫一個json對象,那么就從Write StartObject () 開始,然后以WriteEnd Object() 結束 :  

.NET Core 3.0 里新的JSON API是什么

這樣的話,實際上我已經擁有了一個合法的json文檔。

寫屬性和值  

可以分開寫屬性和值:

.NET Core 3.0 里新的JSON API是什么

也可以同時把屬性和值寫出來:

.NET Core 3.0 里新的JSON API是什么

顯示 JSON 數據  

我先寫這些內容,然后在Main方法里面調用一下:

.NET Core 3.0 里新的JSON API是什么

首先需要告訴writer把它的內容flush給buffer,使用這個buffer我們可以獲得 writer 的輸出,這樣的話就會得到一個byte數組,然后把這個 byte 數組轉化為字符串,這樣就可以在控制臺顯示它了:  

.NET Core 3.0 里新的JSON API是什么

運行一下看看效果:

.NET Core 3.0 里新的JSON API是什么

沒啥太大的問題,就是格式不好看。

對輸出進行格式化  

.NET Core 提供了一個 JsonWrite r Options 類,它可以對Writer進行一些設置。  

.NET Core 3.0 里新的JSON API是什么

這里對輸出進行了縮進,最后把這個options傳遞給Utf 8JsonWriter 的構造函數即可。  

再次運行:

.NET Core 3.0 里新的JSON API是什么

現在好看多了。

JsonSerializer  

前面幾節的內容可能稍微有點底層,我們大部分時候可能只需要對 C# 的類進行串行化或者將 JSON 數據反串行化成 C# 類,在 .NET Core  3.0 里面,我們可以使用 JsonSerializer 這個類來做這些事情。  

例子:

還是使用之前用到的 json 數據:  

.NET Core 3.0 里新的JSON API是什么

然后我們需要建建立兩個類,對應這個文件:

.NET Core 3.0 里新的JSON API是什么

反串行化  

可以使用Json Serializer 類的 Deserialize() 方法對 json 數據反串行化。這個方法支持三種類型的輸入參數,分別是:  

  • JSON數據的字符串

  • Utf 8JsonReader  

  • Read OnlySpan<byte> ,它里面包含 JSON 數據  

為了簡單一點,我直接把json文件讀取成字符串,然后傳給 Deserialize 方法:  

.NET Core 3.0 里新的JSON API是什么

然后我試圖打印出反串行化之后的一些屬性數據。但是這不會成功。因為JSON文件里面數據的大小寫命名規范使用的是 camel casing (簡單理解為首字母是小寫的),而默認情況下 Deserializer 會尋找 Pascal casing 這種規范(簡單理解為每個單詞的首字母都是大寫的)的屬性名。  

格式化  

為解決這個問題,就需要使用 JsonSerializerOptions 類:  

.NET Core 3.0 里新的JSON API是什么

建立該類的一個實例,設置 Property NamingPolicy 為 CamelCase ,然后把這個實例傳遞給 Deserialize 方法的第二個參數。  

運行看結果 :  

.NET Core 3.0 里新的JSON API是什么

這次就沒有問題了。

串行化  

Json Serializer 也支持串行化,也就是把C#數據轉化為 JSON 數據:  

.NET Core 3.0 里新的JSON API是什么

這里使用了相同的 options 。  

運行結果:

.NET Core 3.0 里新的JSON API是什么

如果想讓輸出結果更好看一些,可以在 JsonSerializerOptions 里面進行相應的設置:  

.NET Core 3.0 里新的JSON API是什么

這次輸出結果為:

.NET Core 3.0 里新的JSON API是什么

總結  

總結一下 .NET Core 3.0 新的JSON  API :  

  • Utf 8JsonReader -  讀操作,快速,低級  

  • Utf 8JsonWriter -  寫操作,快速,低級  

  • JsonDocument -  基于DOM,快速  

  • Json Seriliazer -  串行化 / 反串行化,快速  

另外 JSON .NET  仍然被支持。  

以上是“.NET Core 3.0 里新的JSON API是什么”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

左云县| 石城县| 永新县| 阿勒泰市| 古丈县| 建昌县| 无棣县| 景洪市| 霍城县| 安图县| 南昌市| 耒阳市| 南澳县| 汶上县| 连城县| 江陵县| 孟州市| 惠水县| 巨鹿县| 汉中市| 扎鲁特旗| 海林市| 辉南县| 房产| 舞阳县| 珠海市| 新乐市| 孟村| 绿春县| 抚州市| 海兴县| 柳江县| 衡水市| 阿城市| 永福县| 沾益县| 大英县| 曲周县| 佳木斯市| 郴州市| 宁南县|