- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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=/2001/XMLSchema-instance xmlns:xsd=/2001/XMLSchema
Orders /
LastNameSmith/LastName
FirstNameZach/FirstName
/Customer
复制代码
在这里,你会看到Customer对象的属性被序列化,也就是Order对象的列表。如果你将这个输出与Customer类的定义比较一下,你会注意到“Income”属性没有被列出来。这是因为Income属性本身还带有一个XmlIgnore属性,它会让XML序列化库在序列化的时候跳过 Income属性。在序列化过程中跳过属性的一个副作用是这个属性不会被反序列化,所以会在反序列化的时候总是带有默认的值。Orders节点是空的,因为这个客户没有下订单。但是如果我们将含有订单的Customer对象序列化,那么我们就会得到类似下面的输出:
?xml version=1.0 encoding=utf-16?
Customer xmlns:xsi=/2001/XMLSchema-instance xmlns:xsd=/2001/XMLSchema
Orders
Order
Total34.56/Total
/Order
Order
Total156.56/Total
/Order
/Orders
LastNameSmith/LastName
FirstNameZach/FirstName
/Customer
复制代码
要注意每个订单对象都被单独序列化并放在被序列化的Customer对象的Orders节点里。如果你想要反序列化这个Customer对象,那么相关联的Order对象也会被反序列化。注:要被序列化或者反序列化的每个对象都必须有一个空的默认构造函数。如果对象不实现一个空的构造函数,那么就会引发异常。反序列化对象将对象反序列化就和将它们序列化一样简单。下面的代码(列表B)显示了如何将反序列化保存在文件里的对象:列表B
XmlSerializer serial
原创力文档


文档评论(0)