SerializIt 0.6.13

dotnet add package SerializIt --version 0.6.13                
NuGet\Install-Package SerializIt -Version 0.6.13                
此命令旨在在 Visual Studio 中的包管理器控制台中使用,因为它使用的是 NuGet 模块的 Install-Package 语法。
<PackageReference Include="SerializIt" Version="0.6.13" />                
对于支持 PackageReference 的项目,将该 XML 节点复制到项目文件中以引用软件包。
paket add SerializIt --version 0.6.13                
#r "nuget: SerializIt, 0.6.13"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将其复制到交互工具或脚本的源代码中,以引用该软件包。
// 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 替代反射的超快速序列化器

Build Test codecov NuGet

仅支持序列化,不支持反序列化!

支持的序列化器

  • 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 项目为例。

序列化应该非常快!

基准测试

此基准测试比较了 SerializItJSONYAMLXML 序列化与其他常见库,如 TinyhandSystem.Text.JsonYamlDotNetSystem.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 中的 源生成器。但是,如果你要在 YAMLXML 进行序列化,SerializIt 是最佳选择。它比这个基准测试中使用的常见库将这些格式序列化得更快。

备注

SerializIt 只进行序列化。目前还没有反序列化功能。因此,如果你需要反序列化某些 YAMLXML,你仍然最好选择提到的库,因为它们也提供反序列化功能。此外,SerializIt 伴随的 XML 序列化器处于 alpha 阶段,最多如此。需要做大量工作,才能使其成为有用的序列化器。

特性

此序列化器支持以下特性

  • 格式:JSON,YAML,(基本)XML
  • PrettyPrint(JSON/XML):开启/关闭
  • 自定义缩进 - 默认为制表符
  • 可以跳过定义的属性
  • 可以跳过具有默认值的属性
  • 可以排序属性

待改进

[ ] 值转换器(序列化复杂数据类型,如 GUIDBitInteger
[ ] 自定义序列化器(支持自定义格式)
[ ] 序列化特定成员选项(如 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 已计算。
兼容的目标框架
包含的目标框架(在包内)
更多关于 目标框架.NET Standard 的信息。
  • .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