nanoFramework.Serialization.Helper 1.0.12

保留前缀
dotnet add package nanoFramework.Serialization.Helper --version 1.0.12                
NuGet\Install-Package nanoFramework.Serialization.Helper -Version 1.0.12                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Serialization.Helper" Version="1.0.12" />                
对于支持 PackageReference 的项目,将此 XML 节复制到项目文件中以便引用此包。
paket add nanoFramework.Serialization.Helper --version 1.0.12                
#r "nuget: nanoFramework.Serialization.Helper, 1.0.12"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将此复制到交互式工具或脚本的源代码中以便引用包。
// Install nanoFramework.Serialization.Helper as a Cake Addin
#addin nuget:?package=nanoFramework.Serialization.Helper&version=1.0.12

// Install nanoFramework.Serialization.Helper as a Cake Tool
#tool nuget:?package=nanoFramework.Serialization.Helper&version=1.0.12                

Quality Gate Status Reliability Rating NuGet #yourfirstpr Discord

nanoFramework logo


欢迎使用 .NET nanoFramework System.Runtime.Serialization 仓库

构建状态

组件 构建状态 NuGet 包
nanoFramework.System.Runtime.Serialization Build Status NuGet

用法

BinaryFormatter 类允许将数据序列化和反序列化为二进制格式。这允许紧凑的存储,并且由于它在本地代码中实现,因此序列化和反序列化操作更快。

唯一的要求是为类或其字段添加[Serializable]属性。其他属性可用于向序列化引擎提供提示,以便尽可能地减少序列化数据。更多内容将在下一节中介绍。

警告 .NET nanoFramework中二进制序列化的实现与.NET Framework或.NET Core的对应实现不兼容,这意味着无法用于在两个框架之间交换数据。

序列化类

以下是一个将在以下示例中使用的Person类。

[Serializable]
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public DateTime Birthday { get; set; }
    public int ID { get; set; }
    public string[] ArrayProperty { get; set; }
    public Person Friend { get; set; }
}

要序列化,只需调用Serialize()方法,并传递类实例。例如

var nestedTestClass = new Person()
{
    FirstName = "John",
    LastName = "Doe",
    Birthday = new DateTime(1988, 4, 23),
    ID = 2700,
    Address = null,
    ArrayProperty = new string[] { "hello", "world" },
    Friend = new Person()
    {
        FirstName = "Bob",
        LastName = "Smith",
        Birthday = new DateTime(1983, 7, 3),
        ID = 2000,
        Address = "123 Some St",
        ArrayProperty = new string[] { "hi", "planet" },
    }
};

byte[] serializedPerson = BinaryFormatter.Serialize(nestedTestClass);

serializedPerson字节数组包含nestedTestClass的二进制表示。

反序列化类

为了将类从其二进制表示反序列化为类的实例,请调用Deserialize()方法,并传递二进制表示。

[Serializable]

Person anotherPerson = (Person)BinaryFormatter.Deserialize(serializedPerson);

序列化提示

有一些可选属性可用于向序列化引擎提供提示,以尽可能减少序列化数据。以下是以Person类为例,可能实现的优化

[Serializable]
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public DateTime Birthday { get; set; }
    [SerializationHints(RangeBias = 2000)]
    public int ID { get; set; }
    [SerializationHints(ArraySize = 2)]
    public string[] ArrayProperty { get; set; }
    public Person Friend { get; set; }
}

SerializationHints提供了几种选项来改进数据打包。观察上面的ID属性,它是一个int类型,没有优化的话占用32位。现在,这个值用于存储ID,假设为了示例目的,只存储大于2000的ID。使用RangeBias的值为2000,这个值将从存储的值中减去。在上面的代码中,值为2700的ID将序列化为(2700 - 2700 = 700),这可以存储为一个16位值,而不是最初占用的32位。

另一个序列化提示是数组大小。对于ArrayProperty,假设它总是包含2个元素。通过添加ArraySize并指定数组大小,将把这个信息作为序列化数据的一部分存储,从而节省了否则会被浪费的空间。

反馈和文档

有关文档、提供反馈、提交问题和了解如何贡献,请参阅主仓库

加入我们的Discord社区这里

鸣谢

该项目贡献者名单可在CONTRIBUTORS中找到。

许可证

nanoFramework类库采用MIT许可证

行为准则

本项目采用了贡献者公约中定义的行为准则,以明确社区中期望的行为。更多信息请参阅.NET Foundation行为准则

.NET Foundation

本项目由.NET Foundation支持。

产品 兼容和额外的计算目标框架版本。
.NET 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 框架 net48 兼容。 net481 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET 标准化 的信息。
  • .NET Framework 4.8

    • 无依赖。
  • net6.0

    • 无依赖。

NuGet 包

此包没有被任何 NuGet 包使用。

GitHub 仓库

此包没有被任何流行的 GitHub 仓库使用。

版本 下载 最后更新
1.0.12 239 12/16/2022