nanoFramework.System.Runtime.Serialization 1.0.36

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

// Install nanoFramework.System.Runtime.Serialization as a Cake Tool
#tool nuget:?package=nanoFramework.System.Runtime.Serialization&version=1.0.36                

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 不兼容,这意味着不能在两个框架之间交换数据。.NET Framework 和 .NET Core 提供了一个辅助类来序列化和反序列化来自(或发送到)nanoFramework设备的请求数据。有关详细信息,请参阅下面的相应 部分

序列化类

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

[Serializable]
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address;
    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 的二进制表示。

注意 默认情况下,可序列化类中的所有属性和字段都将被序列化,除非它们被 NonSerialized 属性标记。

反序列化类

为了从类的二进制表示将其反序列化为一个类的实例,请调用 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;
    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,假设一个例子中的 ID 只存储大于 2000 的 ID。使用 RangeBias 与值为 2000,将从这个值中减去要存储的值。在上述代码中,具有值 2700 的 ID 将被序列化为(2700 - 2700 = 700),这个值可以存储为 16 位值而不是它最初需要的 32 位。

另一个序列化提示是数组大小。对于 ArrayProperty,假设它总是包含 2 个元素。使用 ArraySize 和数组的大小装饰它,将把该信息作为序列化数据的一部分存储,从而可以节省否则会被浪费的用于数组长度的通用计数空间。

从 .NET Framework 或 .NET Core 使用它

为 .NET Framework 或 .NET Core(作为 NuGet 包 分发)提供了一个辅助类,可以序列化和反序列化来自(或发送到)nanoFramework设备的请求数据。

使用方法与在 nanoFramework 设备上运行的代码完全相同。

要序列化一个类

var binaryFormatter = new BinaryFormatter();
var serializedPerson = binaryFormatter.Serialize(personOne);

将二进制表示反序列化回 C# 类

var binaryFormatter = new BinaryFormatter();
var newPersonOne = binaryFormatter.Deserialize(UnitTestHelper.PersonOneSerialized) as Person;

建议在两个框架的项目中使用相同的交换类的源代码。为此,可以使用任何常规方法,如共享项目或链接文件。

警告 确保类的完全限定名在两端相同。如果没有这样做,将无法正确反序列化数据。这是在两个项目中共享同一代码文件的另一个好理由。

有关此内容的详细示例,请参阅 BinaryFormatter 的单元测试项目。它们在那里使用了这两种技术。

反馈和文档

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

加入我们的Discord社区此处

感谢名单

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

许可证

nanoFramework类库遵循MIT许可证

行为准则

本项目采用了贡献者承诺定义的行为准则,以阐明我们对社区中期望行为的要求。有关更多信息,请参阅.NET Foundation行为准则

.NET Foundation

本项目由.NET Foundation支持。

产品 兼容和额外的计算指定框架版本。
.NET框架 net兼容。
兼容的目标框架
包含的目标框架(在内包中)
了解更多关于目标框架.NET Standard的信息。

NuGet包

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

GitHub仓库

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

版本 下载 最后更新
1.0.36 323 11/9/2023
1.0.34 199 5/10/2023
1.0.23 247 3/11/2023
1.0.20 325 12/27/2022
1.0.10 288 12/16/2022
1.0.7 299 12/12/2022
1.0.5 278 12/12/2022
1.0.2 279 12/12/2022