序列化用例

本文关键字:序列化 | 更新日期: 2023-09-27 17:55:48

我不清楚什么时候应该使用序列化/反序列化技术

任何人都可以为我提供一些基本的用例场景吗?

序列化用例

序列化是将对象转换为某种编码表示以将其从一个位置移动到另一个位置的过程。 通常,这是将对象转换为字节数组或 XML 字符串之类的内容的过程,尽管如果需要,可以序列化为其他格式。

序列化的最常见用途是当您需要跨进程、计算机或更准确地说,跨 AppDomain 边界移动对象时。 因此,如果要将对象从服务器 A 发送到服务器 B,则必须在服务器 A 上序列化该对象,然后将对象的编码表示形式发送到服务器 B,并让服务器 B 反序列化该对象,以便在另一端使用它。

并非所有对象都可以轻松序列化 - 例如,如果将指针发送到另一台服务器,则在内存中具有指向服务器上某个位置的指针的对象可能没有意义。 在这种情况下,您必须编写自己的自定义逻辑来确定如何处理该指针。 也许你根本不会序列化对象的那个属性......也许你还会序列化指针指向的对象 - 这将由你决定。 这就是为什么序列化并不总是容易或自动的原因。

几个明显的例子是,当您需要跨进程边界传输类的实例时(例如,使用 WCF 或其他一些远程通信技术时),或者您希望将实例保存到流(可能是文件)。

序列化只是表示处于序列化状态的对象实例的艺术,允许它们随时重新创建到对象类型中。两个简单的用例是简单地将对象写入文件并将它们写到Stream(用于网络通信、进程间通信或其他)。

例如,如果您想像这样传输一个简单的 DTO:

public class TestDto
{
    public string TestText { get; set; }
    public string MoreText { get; set; }
}

.. 您将添加[Serializable]并使用诸如BinaryFormatter之类的东西来读取NetworkStream的另一端。

默认情况下,您不能简单地将对象实例写入任何形式的Stream或文件,并使其在另一端保持不变。当然,有一些库可以帮助解决这个问题(例如 WCF),它将在内部进行转换(对于[Serializable]类)。

(我不确定你为什么有 wpf,但序列化绝对不是特定于 WPF)