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
<PackageReference Include="nanoFramework.System.Runtime.Serialization" Version="1.0.36" />
paket add nanoFramework.System.Runtime.Serialization --version 1.0.36
#r "nuget: nanoFramework.System.Runtime.Serialization, 1.0.36"
// 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
欢迎来到 .NET nanoFramework System.Runtime.Serialization 代码库
构建状态
组件 | 构建状态 | NuGet 包 |
---|---|---|
nanoFramework.System.Runtime.Serialization |
使用方法
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兼容。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
NuGet包
此包没有被任何NuGet包使用。
GitHub仓库
此包没有被任何流行的GitHub仓库使用。