c# - 什么是 [Serializable] 以及我应该何时使用它?

标签 c# .net serialization

我发现有些类使用 [Serializable] 属性。

  • 这是什么?
  • 我应该什么时候使用它?
  • 我会得到什么样的好处?

最佳答案

这是什么?

当您在 .Net Framework 应用程序中创建对象时,您无需考虑数据如何存储在内存中。因为 .Net Framework 会为您处理这些事情。然而,如果你想将一个对象的内容存储到一个文件中,将一个对象发送到另一个进程或通过网络传输它,你必须考虑对象是如何表示的,因为你需要转换成不同的格式.这种转换称为序列化。

用于序列化

序列化允许开发人员保存对象的状态并根据需要重新创建它,从而提供对象存储和数据交换。通过序列化,开发人员可以执行诸如通过 Web 服务将对象发送到远程应用程序、将对象从一个域传递到另一个域、将对象作为 XML 字符串传递通过防火墙或维护安全性或特定于用户的操作跨应用程序的信息。

申请SerializableAttribute到一个类型以指示可以序列化此类型的实例。申请SerializableAttribute即使该类也实现了 ISerializable控制序列化过程的接口(interface)。

SerializableAttribute 标记的类型中的所有公共(public)和私有(private)字段默认情况下是序列化的,除非类型实现了 ISerializable接口(interface)来覆盖序列化过程。默认序列化过程不包括标有 NonSerializedAttribute 的字段.如果可序列化类型的字段包含特定于特定环境的指针、句柄或其他一些数据结构,并且无法在不同的环境中进行有意义的重构,那么您可能需要应用 NonSerializedAttribute到那个领域。

参见 MSDN了解更多详情。

编辑 1

Any reason to not mark something as serializable

传输或保存数据时,您只需要发送或保存所需的数据。因此,传输延迟和存储问题将会减少。因此,您可以在序列化时选择退出不必要的数据 block 。

关于c# - 什么是 [Serializable] 以及我应该何时使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877808/

相关文章:

c# - 如果我的对象从未构造过,为什么要调用 Dispose?

.net - Windows 7 Ultimate x64 上的 System.Net.HttpListener 限制为 1k 并发连接

c# - 全局保存,检测和阻止更改

java - 在 Java 中序列化对象时出现 StackOverflowError

java - 关于游戏连载的建议

C# 序列化不序列化数据类型日期时间,仅序列化字符串

c# - 使用 ILGenerator 生成方法

c# - Entity Framework Core 上同一个表的两个一对一关系

c# - 检查文本框是否为空

c# - 同时定位 ef core 3.1 和 5 是个好主意吗?