分享
 
 
 

串行化XML(三)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

串行化XML(一) 串行化XML(二) 可以将对象很方便、简单的串行化为XML格式, 除了可以将对象串行化为XML格式以外,还可以将其串行化为二进制、soap格式。

NET Framework通过Reflection提供自动Serialization的机制。当一个对象被序列化(Serialized)的时候,它的类名,Assembly,以及类实例的所有数据成员都将被写入存储介质中。Serialization引擎保持对所有已经被序列化的对象引用的追踪,以确保相同的对象引用最多只被序列化一次。

通常,一个Serialization过程会由formatter(例如BinaryFormatter、SoapFormatter)的Serialize方法引发。

一个类能够被序列化有两种方式:

¨ 将此class简单地标记为Serializable

¨ 为此class实现ISerializable接口,并将此class标记为Serializable。

声明一个可被序列化的类

<Serializable()> _

Public Class Book

Public bookname As String

Public bookID As Integer

End Class

使用BinaryFormatter来将上面的类序列化为二进制格式文件Book.dat,BinaryFormatter位于

System.Runtime.Serialization.Formatters.Binary命名空间

Dim book As New book

book.BookID = 1

book.BookName = "数学"

Dim formatter As BinaryFormatter = New BinaryFormatter

Dim stream As stream = New FileStream("Book.dat", FileMode.Create, FileAccess.Write, FileShare.None)

formatter.Serialize(stream, book)

stream.Close()

经过BinaryFormatter序列化 (serialize)的数据仍然能够通过BinaryFormatter反序列化(deserialize)回来。

Dim formatter As BinaryFormatter = New BinaryFormatter

Dim stream As stream = New FileStream("Book.dat", FileMode.Open, FileAccess.Read, FileShare.None)

Dim book As Book = CType(formatter.Deserialize(stream), Book)

stream.Close()

MessageBox.Show("Book Name:" & book.bookname & vbCrLf & "Book ID:" & book.bookID)

同串行化为xml一样,也可以忽略任意一个域,可以使用NonSerialized属性进行选择

<NonSerialized()> _

Public bookname As String

用类似的方法同样也可以将对象序列化为SOAP格式,我们使用SoapFormatter。

Dim book As New book

book.bookID = 1

book.bookname = "English"

Dim formatter As SoapFormatter = New SoapFormatter

Dim stream As stream = New FileStream("Book.xml", FileMode.Create, FileAccess.Write, FileShare.None)

formatter.Serialize(stream, Book)

stream.Close()

所生成的Book.xml格式为:

<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>

<a1:Book id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/assem/e%2C%20Version%3D1.0.1.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">

<bookname id="ref-3">English</bookname>

<bookID>1</bookID>

</a1:Book>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

总结:

Serialization是.NET中一种实现对象持久性(Persistent)的机制。它是一个将对象中的数据转换成一个单一元素(通常是Stream)的过程。它的逆过程是Deserialization。Serialization的核心概念是将一个对象的所有数据看作一个独立的单元。

一般说来,在两种情况下非常需要Serialization:

1) 当我们希望能够将对象当前的状态完整地保存到存储介质中,以便我们以后能够精确地还原对象时

2) 当我们希望将对象从一个应用程序空间(Application domain)传递到另一个应用程序空间时。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有