1. 程式人生 > >Swifter.Json 可能是 .Net 平臺迄今為止效能最佳的 Json 序列化庫【開源】

Swifter.Json 可能是 .Net 平臺迄今為止效能最佳的 Json 序列化庫【開源】

Json 簡介 Json (JavaScript Object Notation) 是一種輕量級的資料交換格式。它作為目前最歡迎的資料交換格式,也是各大開源貢獻者的必爭之地,如:阿里爸爸的 fastjson(java),騰訊的 rapidjson(c++) 等。但 .Net 卻沒有得到大廠的青睞,在 Swifter.Json 之前 .Net 的 Json 解析庫都不完美。     Swifter.Json 簡介 Swifter.Json 是 .Net 平臺上一個功能強大,簡單易用,穩定及高效能的 Json 序列化和反序列化工具。 已開源,Github : https://github.com/Dogwei/Swifter.Json   Swifter.Json 強大之處 1:支援 .Net 已知所有物件結構,包括深度迴圈結構,引用型別屬性等。 2:支援幾乎所有常用的資料型別,並多方案輕鬆自定義型別的序列化行為,後續將持續增加。 3:支援縮排 Json,忽略 Null 值 0 值 "" 值等,支援使用 { "$Ref" : "#/Target" } 表示重複引用,或將迴圈引用序列化為 Null 等,支援設定最大深度。 4:支援 .Net Core 2.0+,.Net Framework 2.0+,.Net Standard 2.0+,Xamarin,Unify,Mono 等平臺。 5:Swifter.Json 幾乎是無 BUG 的,因為它已有多個上線專案在執行,且每次釋出都會經過我們自己單元測試和 Newtonsoft.Json 和 Spanjson 的單元測試來確保它的穩定性,如果您遇到了問題,可以在 Github 上釋出一個 issue,我們會盡力幫助您。 6:完整全面的 API 中文文件,每個公開的型別和方法都有中文說明,也有 Github 上的 Wiki 文件 (現主要維護文件)。   為什麼要重複造輪子? 目前 .Net 平臺上的 Json 庫都存在一些明顯的缺點:一些雖然簡單易用,但是效能不高,一些效能高卻不穩定,穩定的有效能低且過於複雜。 我們迫切需要一個強大,穩定,高效能且易於使用的 Json 序列化工具! 所以 Swifter.Json 被製作出來了。   Swifter.Json 的庫引用 Swifter.Core:這是一個工具包,它可以為類庫開發者提供巨大的幫助,Swifter.Json 基於它。它提供了高效的資料讀寫 API,高效的數學演算法以及 .Net CLR 無資料資訊,以及解決各平臺版本之間的差異問題等,後期我們將基於這個庫開發一個 Swifter.MessagePack (已開發好,待發布)。這個庫 300~400KB 之間(各平臺有差異)。 Swifter.Unsafe:這是一個 IL 程式碼編寫的庫,因為提供的操作與 System.Runtime.ComplierServices.Unsafe 提供的功能類似,所以取名叫 Swifter.Unsafe,這個庫大慨 5KB。 Swifter.Json:實現 Swifter.Json 的 IValueReader, IValueWriter 即實現了對任意物件執行序列化和反序列化,主要的程式碼在 JsonSerializer (實現 IValueWriter) 和 JsonDeserializer (實現 IValueReader)中,JsonFormatter 提供 API過載,現在已支援全非同步 API。這個庫大概 86KB。   Swifter.Json 的效能 .Net Core 3.0 Preview 7 的測試結果 相比 Newtonsoft.Json 提高了 5 到 10 倍左右,雖然目前已有許多 Json 庫號稱高效能,但實際上我認可的除Swifter.Json只有 Spanjson,但它缺點太明顯,僅支援 .Net Core 2.1+ 且穩定性不好。如果您不願意使用 Swifter.Json,那本人建議您使用 Newtonsoft.Json,畢竟它除了效能之外全是優點。 還有一個與效能密切相關一個特性:小分配。顧名思義就是分配的記憶體大小,舉例:當程式在執行反序列化陣列操作時,因為對陣列長度未知,所以多數 Json 工具都在這個過程中反覆的建立更大的陣列,這個過程相當耗時且耗資源。Swifter.Json 已使用池技術完美解決這個問題。Spanjson 也使用 Core 上的 ArrayPool 池解決,所以我為 Spanjson 點了小星星。   簡單使用
    更多使用方法和文件請上 Github 檢視 Wiki。   最後附上一張我們對 .Net 平臺已有的 Json 庫一個簡單的評價     感謝閱讀!