序列化用例

时间:2013-01-23 15:09:08

标签: c# serialization

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

有人能为我提供一些基本的用例场景吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

例如,如果你想像这样转移一个简单的DTO:

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

..您要添加[Serializable]并使用BinaryFormatter之类的内容,以便能够在NetworkStream的另一端读取它。

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

(我不确定为什么你有,但序列化肯定不是WPF特有的)