知识大全 用.NET框架实现序列化
Posted 属性
篇首语:百艺通,不如一艺精。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用.NET框架实现序列化相关的知识,希望对你有一定的参考价值。
用.NET框架实现序列化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
序列化是将一个对象保存到存储介质上或者将对象进行转换使之能够在网络上传送的行为 在一个对象被序列化之后 你会想要将它反序列化 也就是将数据重新转换为可用的对象的行为 这种类型的功能被用在一个对象必须被从一个上下文封送到另一个上下文的时候 例如当对象跨越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= encoding= utf ?><Customer xmlns:xsi= instance xmlns:xsd= > <Orders /> <LastName>Smith</LastName> <FirstName>Zach</FirstName></Customer>
在这里 你会看到Customer对象的属性被序列化 也就是Order对象的列表 如果你将这个输出与Customer类的定义比较一下 你会注意到 Ine 属性没有被列出来 这是因为Ine属性本身还带有一个XmlIgnore属性 它会让XML序列化库在序列化的时候跳过Ine属性 在序列化过程中跳过属性的一个副作用是这个属性不会被反序列化 所以会在反序列化的时候总是带有默认的值
Orders节点是空的 因为这个客户没有下订单 但是如果我们将含有订单的Customer对象序列化 那么我们就会得到类似下面的输出
<?xml version= encoding= utf ?><Customer xmlns:xsi= instance xmlns:xsd= > <Orders> <Order> <Total> </Total> </Order> <Order> <Total> </Total> </Order> </Orders> <LastName>Smith</LastName> <FirstName>Zach</FirstName></Customer>
要注意每个订单对象都被单独序列化并放在被序列化的Customer对象的Orders节点里 如果你想要反序列化这个Customer对象 那么相关联的Order对象也会被反序列化
注 要被序列化或者反序列化的每个对象都必须有一个空的默认构造函数 如果对象不实现一个空的构造函数 那么就会引发异常
反序列化对象
将对象反序列化就和将它们序列化一样简单 下面的代码(列表B)显示了如何将反序列化保存在文件里的对象
列表B
XmlSerializer serializer = new XmlSerializer(typeof(Customer));
FileStream file = File OpenRead(fileToWrite);
Customer customer = (Customer)serializer Deserialize(file);
file Close();
上面这段代码与前面的序列化代码的唯一不同之处在于我们在这里调用了XmlSerializer Deserialize 这个方法会返回一个对象 我们然后就必须转到将要使用的对象类型上
其他用法
在某些情况下 通过实现XML序列化来保存和检索设置文件是很有用的 例如 你可以只用创建一个含有所需属性的类并将它序列化到磁盘上 而不需要编写一个自定义的XML分析例程来寻找和分析设置文件 这还允许你在需要的时候对文件进行手动编辑 让你不需要自己编写任何XML分析代码 这种方式可以用于任何类型的信息 应用程序可能需要保存从一个执行到另一个执行的这种类型的信息
正如我先前所说的 将XML序列化与Predicate方法(被编译的搜索) Xpath(特别搜索) 以及XmlDocument(提供器)对象一起使用 你可以创建一个面向对象的数据库 这是完全可行的 我已经在进行这样一个项目 所以我会在以后的文章里探讨它背后所隐藏的实现和思想 其目标是利用不超过 行的C#代码就创建完全可实现的面向对象的数据库
发挥XML序列化的优势
cha138/Article/program/net/201311/13628相关参考
知识大全 使用eclipse调用.net web service
以前我用的开发框架都是net现在换成javaEE框架和linux平台还需要一段时间的学习有时在测试工作中需要实现一些功能但是又不会用java实现怎么办呢?这里有一个方法使用net的框架开发webs
.NET基础知识-.NET框架 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!NET框架 NET框
.NET框架类小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一基本概念 NET框架(Fr
.NET的自动序列号工具 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
.Net虚拟框架的实现原理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Net虚拟框架的实现原
知识大全 让.Net 程序脱离.net framework框架运行
让.Net程序脱离.netframework框架运行 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
VB.NET如何在没有.NET框架的机器上运行 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 制
解读.Net虚拟框架的实现原理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在让Net程序脱离
Microsoft.NET框架资源基础 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要Chr
.NETWeb开发震撼之变:.NETMVC框架 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!