SerializIt 0.6.13
dotnet add package SerializIt --version 0.6.13
NuGet\Install-Package SerializIt -Version 0.6.13
<PackageReference Include="SerializIt" Version="0.6.13" />
paket add SerializIt --version 0.6.13
#r "nuget: SerializIt, 0.6.13"
// Install SerializIt as a Cake Addin #addin nuget:?package=SerializIt&version=0.6.13 // Install SerializIt as a Cake Tool #tool nuget:?package=SerializIt&version=0.6.13
<p align="center"> <img src ="https://raw.githubusercontent.com/KhaosCoders/SerializIt/master/Art/Icon.png" width=200 /> </p>
SerializIt
使用 Roslyn SourceGenerators 替代反射的超快速序列化器
仅支持序列化,不支持反序列化!
支持的序列化器
- JSON
- YAML
- (基本) XML
安装
您可以在 nuget.org 上找到此软件包。
使用包管理器控制台安装 SerializIt
Install-Package SerializIt
或终端
dotnet add package SerializIt
用法
创建您想要序列化的模型。
然后创建如下所示的 partial
序列化上下文
using SerializIt;
using Samples.Model;
namespace Samples
{
[Serializer(ESerializers.Yaml)]
[YamlOptions(indentChars: " ")]
[SerializeType(typeof(RootElement))]
[SerializeType(typeof(Container))]
[SerializeType(typeof(Info))]
internal partial class YamlContext { }
}
此上下文将为每个定义的类型添加序列化器。
通过调用 SerializeDocument
(或 SerializeElement
) 方法来序列化对象实例。
// var root = new RootElement();
var serializeIt = new YamlContext();
string text = serializeIt.RootElement.SerializeDocument(root);
以本存储库中的 _samples 项目为例。
序列化应该非常快!
基准测试
此基准测试比较了 SerializIt
的 JSON、YAML 和 XML 序列化与其他常见库,如 Tinyhand、System.Text.Json、YamlDotNet 和 System.Xml.Serialization。该基准测试在我的 HP 笔记本(16GB 内存、Intel i7-8565U、SSD)上运行。
方法 | 平均值 | 误差 | 标准差 | 中位数 | Gen 0 | Gen 1 | Gen 2 | 已分配 |
---|---|---|---|---|---|---|---|---|
TinyhandJson | 428.7 微秒 | 17.17 微秒 | 48.98 微秒 | 398.2 微秒 | 49.8047 | 9.7656 | - | 207 KB |
SystemTextJsonSG | 221.4 微秒 | 3.41 微秒 | 3.50 微秒 | 220.3 微秒 | 38.3301 | 38.3301 | 38.3301 | 121 KB |
SystemTextFormattedJsonSG | 285.7 微秒 | 3.32 微秒 | 2.77 微秒 | 285.2 微秒 | 66.4063 | 66.4063 | 66.4063 | 208 KB |
SerializItJson | 194.2 微秒 | 0.70 微秒 | 0.58 微秒 | 194.4 微秒 | 41.5039 | 41.5039 | 41.5039 | 130 KB |
SerializItFormattedJson | 308.7 微秒 | 2.59 微秒 | 2.02 微秒 | 309.5 微秒 | 52.2461 | 52.2461 | 52.2461 | 164 KB |
YamlDotNet | 13,335.0 微秒 | 111.03 微秒 | 159.23 微秒 | 13,327.2 微秒 | 1125.0000 | 218.7500 | 31.2500 | 4,873 KB |
SerializItYaml | 206.9 微秒 | 2.53 微秒 | 2.25 微秒 | 206.9 微秒 | 41.5039 | 41.5039 | 41.5039 | 130 KB |
XmlSerializer | 628.0 微秒 | 7.36 微秒 | 6.89 微秒 | 626.4 微秒 | 54.6875 | 54.6875 | 54.6875 | 395 KB |
SerializItXml | 175.0 微秒 | 2.55 微秒 | 2.26 微秒 | 174.3 微秒 | 65.6738 | 65.6738 | 65.6738 | 207 KB |
结论
SerializIt
很快。但是,如果你想序列化和反序列化 JSON,你最好使用 System.Text.Json
中的 源生成器。但是,如果你要在 YAML 或 XML 进行序列化,SerializIt
是最佳选择。它比这个基准测试中使用的常见库将这些格式序列化得更快。
备注
SerializIt
只进行序列化。目前还没有反序列化功能。因此,如果你需要反序列化某些 YAML 或 XML,你仍然最好选择提到的库,因为它们也提供反序列化功能。此外,SerializIt
伴随的 XML 序列化器处于 alpha 阶段,最多如此。需要做大量工作,才能使其成为有用的序列化器。
特性
此序列化器支持以下特性
- 格式:JSON,YAML,(基本)XML
- PrettyPrint(JSON/XML):开启/关闭
- 自定义缩进 - 默认为制表符
- 可以跳过定义的属性
- 可以跳过具有默认值的属性
- 可以排序属性
待改进
[ ] 值转换器(序列化复杂数据类型,如 GUID
或 BitInteger
)
[ ] 自定义序列化器(支持自定义格式)
[ ] 序列化特定成员选项(如 XML 中的 CDATA 或 Yaml & Json 中的 Inline)
[ ] XML 命名空间
[ ] XML 属性
点赞这个 ❤️
如果你喜欢我的工作,请支持这个项目!
通过 PayPal 捐赠或成为 GitHub 赞助人
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET | net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
.NET Core | netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
.NET 标准化 | netstandard2.0 兼容。 netstandard2.1 已计算。 |
.NET 框架 | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- 无依赖。
NuGet 包
此包未由任何 NuGet 包使用。
GitHub 仓库
此包未由任何流行 GitHub 仓库使用。
版本 | 下载 | 最后更新 |
---|---|---|
0.6.13 | 144 | 6/4/2023 |
0.6.12 | 113 | 6/4/2023 |
0.6.11 | 111 | 6/4/2023 |
0.6.10 | 117 | 6/4/2023 |
0.6.9 | 110 | 6/4/2023 |
0.6.8 | 110 | 6/4/2023 |
0.6.6 | 109 | 6/4/2023 |
0.6.5 | 112 | 6/4/2023 |
0.6.4 | 114 | 6/4/2023 |
0.6.3 | 112 | 6/4/2023 |
0.6.2 | 120 | 6/4/2023 |
0.6.1 | 108 | 6/4/2023 |
0.6.0 | 112 | 6/4/2023 |
0.5.7 | 117 | 6/2/2023 |
0.5.6 | 117 | 6/2/2023 |
0.5.5 | 113 | 6/2/2023 |
0.5.4 | 123 | 5/6/2023 |
0.5.3 | 117 | 5/6/2023 |
0.5.2 | 122 | 5/6/2023 |
0.5.1 | 122 | 5/6/2023 |
0.5.0 | 121 | 5/5/2023 |
0.4.0 | 154 | 4/21/2023 |