XML的反序列化,也就是将XML直接转为一个类。一个类的序列化,也就是将类直接转为为一个XML。
通过XML对象进行读取XML元素的做法,非常低效而又复杂。而采用XML的反序列化技术,则异常简单。
下面是一个简单XML。它表示root节点下面可能有很多table节点,而每个table节点下面又可能有很多item节点。
为了实现XML的反序列化,我们需要先定义相应的类。
对应的root节点为Checks类,table节点为Table类,item节点为Content类。
root节点下可能有很多table节点,则在Checks类中添加一个Tables属性。
ElementName = "table"表示table节点的名字为table,如果不加,则默认为Table。
table节点还有一些属性,如name,则需要在Table类中添加Name属性。
其它规则类似,则形成了一个多层的,和XML描述的内容相同的类。
完成类之后,我们就可以很简单的实现将XML一次性转化为类。这样之后,访问其值就变成访问一个类中的属性了,这就变得异常简单了。
通过XML对象进行读取XML元素的做法,非常低效而又复杂。而采用XML的反序列化技术,则异常简单。
下面是一个简单XML。它表示root节点下面可能有很多table节点,而每个table节点下面又可能有很多item节点。
1
<?
xml
version
="
1.0"
encoding
="
utf-8"
?>
2
<
root
>
3
<
table
name
="
Department"
referenced
="
Department is referenced."
>
4
<
item
name
="
DepartmentName"
duplicated
="
Department Name is duplicated."
/>
5
</
table
>
6
<
table
name
="
Employee"
referenced
="
Employee is referenced."
>
7
<
item
name
="
EmployeeNo"
duplicated
="
Employee No is duplicated."
/>
8
<
item
name
="
EmployeeName"
duplicated
="
Employee Name is duplicated."
/>
9
</
table
>
10
</
root
>
对应的root节点为Checks类,table节点为Table类,item节点为Content类。
root节点下可能有很多table节点,则在Checks类中添加一个Tables属性。
ElementName = "table"表示table节点的名字为table,如果不加,则默认为Table。
table节点还有一些属性,如name,则需要在Table类中添加Name属性。
其它规则类似,则形成了一个多层的,和XML描述的内容相同的类。
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Xml.Serialization;
6
7
namespace Eallies.Utilities.ContractToBLL
8 {
9 [
Serializable]
10 [
XmlRootAttribute(
"root")]
11
public
class
Checks
12 {
13
private
List<
Table> _Tables =
new
List<
Table>();
14
15 [
XmlElementAttribute(ElementName =
"table", Type =
typeof(
Table))]
16
public
List<
Table> Tables
17 {
18
get {
return
this._Tables; }
19
set {
this._Tables =
value; }
20 }
21 }
22
23 [
Serializable]
24
public
class
Table
25 {
26
private
List<
Content> _Contents =
new
List<
Content>();
27
28 [
XmlAttribute(AttributeName =
"name")]
29
public
string Name {
get;
set; }
30
31 [
XmlAttribute(AttributeName =
"referenced")]
32
public
string Referenced {
get;
set; }
33
34 [
XmlElementAttribute(ElementName =
"item", Type =
typeof(
Content))]
35
public
List<
Content> Contents
36 {
37
get {
return
this._Contents; }
38
set {
this._Contents =
value; }
39 }
40 }
41
42 [
Serializable]
43
public
class
Content
44 {
45 [
XmlAttribute(AttributeName =
"name")]
46
public
string Name {
get;
set; }
47
48 [
XmlAttribute(AttributeName =
"duplicated")]
49
public
string Duplicated {
get;
set; }
50 }
51 }
1
private
static
Checks ChecksDeserialize(
string checks)
2 {
3
try
4 {
5
XmlSerializer objSerializer =
new
XmlSerializer(
typeof(
Checks));
6
Stream objStream =
new
FileStream(checks,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite);
7
Checks objChecks =
null;
8
9 objChecks = (
Checks)objSerializer.Deserialize(objStream);
10
11 objStream.Close();
12
13
return objChecks;
14 }
15
catch
16 {
17
throw;
18 }
19 }
本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79006,如需转载请自行联系原作者