xml反序列化时,如何生成与之对应的类文件

一、序列化概念
(微软定义)序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

二、学习这方面的知识需要那些基础
1,知道XML是什么,如何定义一个标准的XML文件
2,知道XML架构(Schema)是什么,如何定义一个标准的XML架构文件
3,知道XSD.exe的基本用法。
如果你对XML或Schema有什么不清楚的地方,请到这里来学习 中国XML论坛

三、案例学习
假如我们这这样一个xml文件,我们需要将它反序列化为对象

<?xml version="1.0" encoding="UTF-8"?>
<!--示例 XML 文件由 XMLSpy v2006 U 创建 (http://www.altova.com)-->
<Pages>
    
<FirstPage Url="Text">
        
<SecondPage Url="Text"/>
        
<SecondPage Url="Text"/>
    
</FirstPage>
    
<FirstPage Url="Text">
        
<SecondPage Url="Text"/>
        
<SecondPage Url="Text"/>
    
</FirstPage>
</Pages>
要将xml反序列化为对象,他们之间不能直接转换,需要一个中间人,就是Schema,Schema文件我们可以用工具生成,也可以自己手写,一般的做法就是先用工具生成,然后在其基础上修改,我这里用的生成工具是XMLSpy v2006,默认生成格式如下:
Code
其中的<xs:simpleType>节点我们不需要,修改成如下格式:
Code
用微软提供的工具xsd.exe也可以生成xml架构,网上有很多文章都做了介绍,这里就不列举了。
有了Schema文件,我们就可以用xsd.exe工具来生成和xml文件对应的类文件了。生成方法如下:
首先运行.NET FrameWork的SDK命令提示
在其中键入:xsd /c /l:CS xsd文件路径 /o:文件输出路径
切记"/o:文件输出路径"之间不要有空格
其中红色标识部分分别为文件所在的物理路径,生成的类文件如下:
Code
正常情况下,我们需要对工具生成的类文件做一些修改,修改如下:
Code
这个类文件就是我们需要的东西了,这个类将集合用数组表示,我们不能使用foreach访问集合内的数据,如果我们想使用foreach该怎么办呢?我接着修改类结构
数组的基类(Array)实现了IEnumerable接口,可以使用foreach访问集合内的数据,下边修改的类同样支持foreach,应该是类的另一种写法(我原来以为数组不支持foreach,真是太大意了,以后尽量少犯这么低级的错误。)
修改后的类文件如下:
Code
仔细看过之后,不难发现,比上一个类多了两个集合类,FirstPageCollectionSecondPageCollection这两个类,我们就是用他们来取代数组,这连个类都继承至ArrayList,当然你也可以继承自别的类,例如CollectionBase,当然你也可以手写,需要实现如下接口IEnumerable。这是一个网友写的实现什么接口的类实例可以被foreach

四、结束语
xml反序列化其实并不复杂,只是我们平时用的少,多用两次就没有什么了。
我们这里写了一个简单的demo,大家对比这看看会好理解一点,文件下载
posted @ 2008-03-04 18:06  王庆  阅读(4729)  评论(12编辑  收藏  举报