假设你有两个不同的物理机器上运行两个应用程序。这两个应用程序都需要交换两个应用程序通常使用的数据。这些应用程序彼此交谈以与一些介质共享数据,这些介质可以是文件系统,tcp或udp连接或任何其他合适的网络协议,或者可以是直接的内存数据交换。任何这些媒介只会理解以一系列比特形式描述的数据。因此,当一个应用程序需要向另一个应用程序发送值10时,值10将作为其二进制表示1010发送,并且您还将传递一些描述1010的信息。此元信息也将是一系列的其他应用程序可以容易理解。虽然这很容易。
让我们看另一个例子,其中这两个应用程序需要交换更复杂的非原始数据类型。假设他们需要交换类型为Book的对象,其中Book是应用程序中的自定义类,并且这两个应用程序都具有Book类型的定义。
public class Book
{
Book() { }
public long BookId { get;set; }
public string Author { get;set; }
public string Title { get;set; }
}
如何在两个应用程序之间交换类型为book的对象?为了能够在两个应用程序之间共享对象,您需要能够将Book对象转换为二进制表示。这是序列化进入图片的地方。
借助序列化,您可以定义对象如何转换为其二进制表示形式。接收应用程序将执行相反的过程,即反序列化,它从二进制表示中构造一个Book对象。