Colorful Sky
zesting in .NET, VB and C#
博客园
首页
社区
新随笔
联系
订阅
管理
随笔-24 评论-69 文章-1 trackbacks-2
对象序列化:使用System.Xml.Serialization命名空间
要使用.NET进行对象的序列化,必须在解决方案中添加System.Xml的引用,并且在类文件中引入System.Xml.Serialization命名空间。这样就可以在文件中使用序列化所需要的各种特性了。
Imports
System.Xml.Serialization
如果对XML Serialization缺少了解,请首先参考拙文:
在.NET中实现对象序列化
<?
xml version="1.0" encoding="utf-8"
?>
<
order
id
=”123456”>
<orderDate
>
2005-04-05
</
orderDate
>
<
items
>
<
item
>
<
name
>
对象序列化
</
name
>
</
item
>
</
items
>
</
order
>
上面的例子包含了典型的XML中常见的各种元素:XML声明、XML根节点、XML节点、XML属性、XML集合。除XML声明外,在.NET中都有对应的特性用于定义这些元素。这些特性包括:XmlRootAttribute、XmlTypeAttribute、XmlElementAttribute、XmlAttributeAttribute、XmlArrayAttribute和XmlArrayItemAttribute。另外,还有两个常用的特性,XmlIgnoreAttribute用于标记在对象序列化时需要被忽略的部分,XmlIncludeAttribute用于标记在生成XML Schema时需要包括的类型。
如果没有显式地标记任何特性,那么默认类的特性为XmlTypeAttribute、类成员的特性为XmlElementAttribute,且名称为类或类成员的名称。例如:
Public
Class Order
Class
Order
Public
ID
As
String
Public
OrderDate
As
String
End Class
如果不做任何特性标记,使用下面的代码序列化时:
Dim
o
As
New
Order
With
o
.ID
=
123456
.OrderDate
=
Date
.Now.ToShortDateString
End
With
Dim
writer
As
New
XmlTextWriter(
"
abc.xml
"
, Encoding.UTF8)
Dim
serializer
As
New
XmlSerializer(
GetType
(Order))
writer.Formatting
=
Formatting.Indented
serializer.Serialize(writer, o)
序列化后的XML为:
<?
xml version="1.0" encoding="utf-8"
?>
<
Order
xmlns:xsd
="http://www.w3.org/2001/XMLSchema"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
>
<
ID
>
123456
</
ID
>
<
OrderDate
>
2005-4-11
</
OrderDate
>
</
Order
>
可以看到,<Order>对应Order类,而<ID>和<OrderDate>分别对应Order类中的字段ID和OrderDate。另外,多了一个XML声明和两个XML命名空间。
XML声明是.NET自动添加的,但是encoding是在XmlTextWriter中指定的,如果不指定encoding,那么XML声明只有<?xml version="1.0"?>。我使用的是.NET 1.1,这个版本中只支持XML 1.0版本。另外,如果不指定encoding,那么默认的编码可能也是UTF8(没找到相关的资料)。
.NET默认为Order类添加了XMLSchema和XMLSchema-instance两个W3C的命名空间。该命名空间也可以自己指定,方法是使用XmlSerializer的另一个Serialize方法。
Dim
ns
As
New
XmlSerializerNamespaces
ns.Add(
""
,
""
)
writer.Formatting
=
Formatting.Indented
serializer.Serialize(writer, o, ns)
要将类序列化为XML节点:
<
XmlType(
"
order
"
)
>
_
Public
Class Order
Class
Order
‘ any code here.
End Class
要将类序列化为XML根节点:
<
XmlRoot(
"
order
"
)
>
_
Public
Class Order
Class
Order
‘ any code here.
End Class
当在类中同时使用XmlRootAttribute、XmlTypeAttribute时,序列化文档中的类型以XmlRootAttribute为准:
<
XmlRoot(
"
order
"
), XmlType(
"
anotherOrderName
"
)
>
_
Public
Class Order
Class
Order
‘ any code here.
End Class
要将类成员序列化为XML节点:
<
XmlAttributeAttribute(
"
id
"
)
>
_
Public
ID
As
String
要将类成员序列化为XML属性:
<
XmlAttributeAttribute(
"
id
"
)
>
_
Public
ID
As
String
要将类成员序列化为XML集合:
<
XmlRoot(
"
order
"
), XmlType(
"
anotherOrderName
"
)
>
_
Public
Class Order
Class
Order
<
XmlAttributeAttribute(
"
id
"
)
>
_
Public
ID
As
String
Public
orderDate
As
String
<
XmlArray(
"
items
"
), XmlArrayItem(
"
item
"
, Type:
=
GetType
(OrderItem))
>
_
Public
Items
As
New
ArrayList
End Class
<
XmlType(
"
orderItem
"
)
>
_
Public
Class OrderItem
Class
OrderItem
Public
Name
As
String
End Class
使用特性的一个好处是:
可以在代码和序列化的文档中使用不同的编码规范
。
posted on 2005-04-11 17:30
zsi
阅读(2469)
评论(1)
编辑
收藏
网摘
所属分类:
.net
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
人才
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
Google站内搜索
相关文章:
相关链接:
所属分类的其他文章:
调用unrar.dll时SEHException外部组件异常的处理
扯扯OpenFileDialog和.NET的缺省目录
给ASP.NET程序换换地儿
对象序列化:经验小结
对象序列化:使用XmlSerializer走完最后一步
对象序列化:使用System.Xml.Serialization命名空间
在.NET中实现对象序列化
使用.net framework再发布的插件发布应用程序
最新IT新闻:
后“开放”平台时代
李彦宏首次表态竞价排名问题:有错能改善莫大焉
杨致远发表博客解释辞职原因
微软公布免费安全软件计划
《时代》:杨致远被Google玩弄于股掌之间?
<
2005年4月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我的标签
asp.net
(3)
GridView
(2)
分页
(1)
firefox
(1)
unrar
(1)
UnRARNet
(1)
SEHExcption
(1)
解压缩
(1)
外部组件错误
(1)
google
(1)
更多
随笔分类
(22)
.net(8)
ASP.NET(4)
IT生活(1)
VB.net(4)
Web 技术(2)
设计模式(2)
数据库(1)
随笔档案
(24)
2008年10月 (2)
2008年9月 (1)
2008年1月 (1)
2007年6月 (1)
2005年5月 (1)
2005年4月 (6)
2005年3月 (1)
2005年2月 (2)
2004年12月 (3)
2004年11月 (6)
文章档案
(1)
2004年11月 (1)
相册
零碎
.net Community
Code Project
CSDN
devCity.NET
GotDotNet
MSDN
MSDN中国
Windows Forms .NET
微软开发者社区
C#
C# Corner
C# Corner Forums
VB.net
Paul Vick's Blog
VB Developer Center
VB FAQ
VB.NET Heaven
vbCity
技术专题
Pattern Share
patterns & practices
最新评论
1. re: GridView 始终显示 Pager 分页行的一种方法
不错的方法^_^
--陈晨
阅读排行榜
1. 在.NET中实现对象序列化(4702)
2. 对象序列化:使用System.Xml.Serialization命名空间(2469)
3. 扯扯OpenFileDialog和.NET的缺省目录(2264)
4. Chrome: Google加入浏览器大战之兼容性(1984)
5. 对象序列化:使用XmlSerializer走完最后一步(1894)
评论排行榜
1. Chrome: Google加入浏览器大战之兼容性(26)
2. 扯扯OpenFileDialog和.NET的缺省目录(9)
3. 另人费解的IsNot关键字(9)
4. 还不快进入Design Pattern的世界?(9)
5. 微软新发布的共享设计模式的WIKI(5)