序列化用例

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

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

序列化是将对象转换为某种编码表示以将其从一个位置移动到另一个位置的过程。 通常,它是将对象转换为字节数组或XML字符串的过程,但如果您愿意,可以将其序列化为其他格式。

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

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

一些明显的例子是当你需要跨进程边界传输类的实例时(例如,当使用WCF或其他一些远程通信技术时)或者你想要将实例持久化到流(可能是文件)。

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

例如,如果您想要传输一个简单的DTO,如下所示:

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

..你想添加[Serializable]并使用像BinaryFormatter这样的东西,以便能够在NetworkStream的另一端读取它。

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

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