c# - 什么是可序列化对象?

标签 c# serializable

什么是 C# 中的可序列化对象? 我想可序列化这个词比“可序列化对象”更让我反感。

最佳答案

通常对象是随机访问,也就是说,您可以指定对象的任何部分(属性或字段)并直接访问该部分。如果您使用 RAM 来存储对象,这一切都很好,因为 RAM 是Random Acess Memory,因此适合工作。

当您需要将对象存储在传统上不是随机访问的介质上时,例如磁盘,或者您需要通过 介质传输对象(如网络),则需要将对象转换为适合相关介质的形式。此转换过程称为序列化,因为结构化对象被扁平化或序列化,使其更适合长期存储或通过网络传输。

为什么不直接将 RAM 中包含对象的位复制到磁盘,或者将其作为不透明的 blob 通过网络发送? ... 你可能会问。几个问题:

  1. 对象存储在内存中的格式通常是专有的,因此不适合公共(public)消费——对象存储在内存中的方式针对内存中使用进行了优化。
  2. 当一个对象引用其他对象时,这些引用仅在正在运行的应用程序的上下文中有意义。除非在序列化过程中,对象图被相应地遍历和序列化,否则不可能有意义地反序列化对象。可能需要将这些引用转换为具有应用程序实例上下文之外意义的形式。
  3. 异构系统之间可能存在互操作性要求,在这种情况下,需要一种表示对象的标准方法(通常为此选择某种形式的 XML)。

关于c# - 什么是可序列化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303958/

相关文章:

java - Java 不可序列化

c# - Rijndael 加密在 Windows Server 2012 上不起作用

c# - 一个页面只能有一个服务器端表单标签。 ASP.NET 中的表单错误

c# - 使用Windows Media Player库无法播放两个音频剪辑

.net - 重新 : design of custom exceptions: must I implement the default constructor? "inner exception"构造函数?

java - Serializable 是如何工作的,为什么使用起来比 Parcelable 慢?

java - SerialVersionUID Java - SerialVersionUID 如何工作?

database - "conflict serializable"和 "conflict equivalent"有什么区别?

c# - 如何获取 IQueryable 中使用的方法和值?

c# - RestSharp JSON 参数发布