序列化是将一个对象保存到存储介质上或者将对象进行转换使之能够在网络上传送的行为。在一个对象被序列化之后,你会想要将它反序列化,也就是将数据重新转换为可用的对象的行为。这种类型的功能被用在一个对象必须被从一个上下文封送到另一个上下文的时候,例如当对象跨越App域的时候。另外一个例子是Web服务——对象在服务器上被序列化,通过网络被(封送或)发送到的客户端,然后被反序列化成有用的对象。
从二进制到XML,.NET框架为开发人员提供了很多序列化选项,甚至允许开发人员创建自己的序列化例程。在本文中,我将着重讨论XML的序列化,并告诉你如何利用这一内置的功能。
XML序列化
.NET框架提供的一种形式的序列化是XML序列化。在这种类型的序列化里,对象状态被以XML格式保存。这使得被序列化的对象能够被不同的系统取得并修改,甚至是那些不是用.NET编写的系统。另外一个优势是被序列化的对象对于人来说是可读和可写的——因此更新对象的方式莫过于打开写字板更改其值。
XML序列化常常被来远程控制项目和Web服务项目里,虽然你可能会在别的地方发现它,比如DataSet封送。在与Xpath查询和Predicate方法一起使用的时候,XML序列化能够被用来实现面向对象的数据库——我会在今后的文章里谈这方面的内容。
使用XML序列化
在.NET框架里利用内置的XML序列化方法相对较为容易。你只需要熟悉一些类和属性就可以开始使用简单的XML序列化了:
System.Xml.Serialization命名空间:含有使用XML序列化所需要的类和功能。这个命名空间应该被放在使用XML序列化的类的顶部的一个“using”命令里。
XmlSerializer类:提供将对象序列化和反序列化的功能。
XmlIgnore属性:告诉XmlSerializer类跳过你不希望序列化的成员。
这个列表只不过让你对序列化有一个初步的了解。还有更多的对象可以供你在使用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>
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
如果要storm使用kryo来序列化这些java bean,是不是需要在kryo里注册?
-
.NET架构师:函数式语言做领域驱动设计
Scott一位.NET架构师,同时也是掌握函数式编程的作者,他很欣赏函数式编程,对于Scott来说,面向对象编程的那些概念也很恐怖,比如多态、泛型、继承、协变等。
-
软件开发就像炒股 关键看你怎么选股票!
本文作者Paulo Ortins在这里分享了对于选择哪种编程语言作为软件开发工作的起点的话题,并阐述了自己的观点。
-
增进离岸Java开发效率的十个提示
近日,Cygnet Infotech公司发布了一篇博文,谈到了如何增进离岸Java开发的效率。众多的ISV与软件厂商总是在不断寻找能以最低的代价实现其业务目标的解决方案。