串行化XML(三)
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)传递到另一个应用程序空间时。
下一篇:串行化XML(二) >>
相关文章:
- · XML与面向Web的数据挖掘技术
- · “穿越”防火墙的XML技术
- · XML和现代CGI应用程序
- · 用XslTransform转换数据
- · XSLT介绍
- · 有关XSLT输出结果的四个技巧
- · 高效交换XML文档
- · 使SQL数据支持XML
- · 构建一个“即插即用”的XML Windows Service
- · XML初学者必读
- · 用XML实现编程语言间的互译
- · XML在系统日志设计中的运用
- · 在.NET Framework中轻松处理XML数据(一)
- · XML在.net平台下的自定义控件的应用
- · 另一篇:用XMLHTTP Post/Get HTML页面时的中文乱码问题之完全Script解决方案
- · XSLT / XML / C#
- · 找到一篇关于xmlhttp的文章
- · 将XML信息存入文件
- · 我没看但是根据提示这个是写XML的,好事VB的---哎。。。。QUICKSTART呀。。靠你就可以说几天了
- · 老外编的程序(一)--XMLDocument转为String
- · Write relational data to an XML file
- · 这个东东很好的,俺是从xml偷过来的。(xml兄弟,俺转载了)
- · 使用c#如何读取xml文件
- · 对象化数据---学习Xml Serialization的一些体会
- · 利用XML不离开页面刷新数据
- · Reading XML Files using XmlDocument(转)
- · 基于XML的下拉菜单(源代码)
- · XML 序列化(Serialization) 转贴51dotnet
- · 比较XML数据存取APIs(续)
- · 比较XML数据存取APIs(ZT)
- · Upgrade Your INI Files to XML with .NET(1)
- · Upgrade Your INI Files to XML with .NET (2)
- · Upgrade Your INI Files to XML with .NET (3)
- · Upgrade Your INI Files to XML with .NET (4)
- · 用C#遍历XML
- · XMLHelp 下
- · XMLHelp(上)
- · XmlConnection
