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 库一个简单的评价
来源: https://www.cnblogs.com/Dogwei/p/11444426.html