序列化是将一个对象保存到存储介质上或者将对象进行转换使之能够在网络上传送的行为。在一个对象被序列化之后,你会想要将它反序列化,也就是将数据重新转换为可用的对象的行为。这种类型的功能被用在一个对象必须被从一个上下文封送到另一个上下文的时候,例如当对象跨越App域的时候。另外一个例子是Web服务——对象在服务器上被序列化,通过网络被(封送或)发送到的客户端,然后被反序列化成有用的对象。
从二进制到XML,.NET框架为开发人员提供了很多序列化选项,甚至允许开发人员创建自己的序列化例程。在本文中,我将着重讨论XML的序列化,并告诉你如何利用这一内置的功能。
XML序列化
.NET框架提供的一种形式的序列化是XML序列化。在这种类型的序列化里,对象状态被以XML格式保存。这使得被序列化的对象能够被不同的系统取得并修改,甚至是那些不是用.NET编写的系统。另外一个优势是被序列化的对象对于人来说是可读和可写的——因此更新对象的方式莫过于打开写字板更改其值。
XML序列化常常被来远程控制项目和Web服务项目里,虽然你可能会在别的地方发现它,比如DataSet封送。在与Xpath查询和Predicate方法一起使用的时候,XML序列化能够被用来实现面向对象的数据库——我会在今后的文章里谈这方面的内容。
使用XML序列化
在.NET框架里利用内置的XML序列化方法相对较为容易。你只需要熟悉一些类和属性就可以开始使用简单的XML序列化了:
这个列表只不过让你对序列化有一个初步的了解。还有更多的对象可以供你在使用XML序列化的时候使用。
列表A是将Customer对象序列化的一个简单例子。这个Customer对象在下载文件的示例应用程序里被定义。
列表A
Customer customer = newCustomer();
customer.FirstName = "Zach";
customer.LastName = "Smith";
XmlSerializer serializer = newXmlSerializer(typeof(Customer));
StringWriter writer = newStringWriter();
serializer.Serialize(writer, customer);
Console.WriteLine(writer.ToString());
正如你看到的,XML序列化是一个很简单的过程。我们只需要创建一个需要被序列化的对象,创建用于这种类型对象的XmlSerializer,并调用XmlSerializer.Serialize。被序列化的对象然后被写到提供的Stream里——在本文中是一个叫做“writer”的StringWriter。
如果你看看被序列化的对象,你会注意到它很容易读懂。下面就是被序列化的Customer对象的内容:
<?xml version="1.0" encoding="utf-16"?>
<Customer xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Orders />
<LastName>Smith</LastName>
<FirstName>Zach</FirstName>
</Customer>