介绍.NET序列化的实现机制,帮忙谢谢了!!

clnara921 2005-05-20 07:33:17
.NET序列化的实现机制,定制序列化,对序列化的适用情况哪位给我介绍一下
最好给点实例。
看了一些,不过很糊涂。不太清楚。
谢谢了!!!
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
TonyTonyQ 2005-05-20
  • 打赏
  • 举报
回复
.NET实现序列化大致可以分为2种,一种是XML序列化,这种只适用于内部存储结构都基于文本的对象,可以参考 System.XML.Serialization 命名空间下的类。
第二种是二进制序列化,可以适用于任意对象。
序列化只能达到保存对象内数据的目的,并不会保存对象的方法之类的信息。XML序列化得到的是XML文本,直观并可以用文本编辑器直接编辑,而二进制序列化虽然可以适用于任意对象,但序列化后得到的是二进制的文件,无法直接编辑。
wangsaokui 2005-05-20
  • 打赏
  • 举报
回复
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconanexampleofxmlserializationwithxmlserializer.htm
wangsaokui 2005-05-20
  • 打赏
  • 举报
回复
如果你想在网络传输一个对象比较困难,所以需要序列化后传输,接收后需要反序列化得到对象。
序列化数据集
除了对公共类的实例进行序列化之外,DataSet 的实例也可以被序列化,如下面的示例所示。

[Visual Basic]
Private Sub SerializeDataSet(filename As String)
Dim ser As XmlSerializer = new XmlSerializer(GetType(DataSet))
' Creates a DataSet; adds a table, column, and ten rows.
Dim ds As DataSet = new DataSet("myDataSet")
Dim t As DataTable = new DataTable("table1")
Dim c As DataColumn = new DataColumn("thing")
t.Columns.Add(c)
ds.Tables.Add(t)
Dim r As DataRow
Dim i As Integer
for i = 0 to 10
r = t.NewRow()
r(0) = "Thing " & i
t.Rows.Add(r)
Next
Dim writer As TextWriter = new StreamWriter(filename)
ser.Serialize(writer, ds)
writer.Close()
End Sub
序列化 XmlElement 和 XmlNode
您还可以对 XmlElement 或 XmlNode 类的实例进行序列化,如下面的示例所示。

[Visual Basic]
private Sub SerializeElement(filename As String)
Dim ser As XmlSerializer = new XmlSerializer(GetType(XmlElement))
Dim myElement As XmlElement = _
new XmlDocument().CreateElement("MyElement", "ns")
myElement.InnerText = "Hello World"
Dim writer As TextWriter = new StreamWriter(filename)
ser.Serialize(writer, myElement)
writer.Close()
End Sub

Private Sub SerializeNode(filename As String)
Dim ser As XmlSerializer = _
new XmlSerializer(GetType(XmlNode))
Dim myNode As XmlNode = new XmlDocument(). _
CreateNode(XmlNodeType.Element, "MyNode", "ns")
myNode.InnerText = "Hello Node"
Dim writer As TextWriter = new StreamWriter(filename)
ser.Serialize(writer, myNode)
writer.Close()
End Sub
序列化包含返回复杂对象的字段的类
如果属性或字段返回一个复杂对象(如数组或类实例),则 XmlSerializer 将其转换为嵌套在主 XML 文档内的元素。例如,下面代码中的第一个类返回第二个类的实例。

[Visual Basic]
Public Class PurchaseOrder
Public MyAdress As Address
End Class

Public Class Address
Public FirstName As String
End Class
序列化的 XML 输出可能类似于下面这样:

<PurchaseOrder>
<Address>
<FirstName>George</FirstName>
</Address>
</PurchaseOrder>
序列化对象数组
您还可以序列化返回对象数组的字段,如下面的示例所示。

[Visual Basic]

Public Class PurchaseOrder
public ItemsOrders () As Item
End Class

Public Class Item
Public ItemID As String
Public ItemPrice As decimal
End Class
如果订购了两件商品,则序列化的类实例可能类似于下面这样:

<PurchaseOrder xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd="http://www.w3.org/20001/XMLSchema">
<Items>
<Item>
<ItemID>aaa111</ItemID>
<ItemPrice>34.22</ItemPrice>
<Item>
<Item>
<ItemID>bbb222</ItemID>
<ItemPrice>2.89</ItemPrice>
<Item>
</Items>
</PurchaseOrder>
序列化实现 ICollection 接口的类
可以通过实现 ICollection 接口来创建自己的集合类,然后使用 XmlSerializer 序列化这些类的实例。注意,当类实现 ICollection 接口时,只序列化类所包含的集合。不序列化添加到该类的任何公共属性或字段。该类必须包含 Add 方法和要序列化的 Item 属性(C# 索引器)。

[Visual Basic]
Imports System
Imports System.IO
Imports System.Collections
Imports System.Xml.Serialization

Public Class Test
Shared Sub Main()
Dim t As Test= new Test()
t.SerializeCollection("coll.xml")
End Sub

Private Sub SerializeCollection(filename As String)
Dim Emps As Employees = new Employees()
' Note that only the collection is serialized--not the
' CollectionName or any other public property of the class.
Emps.CollectionName = "Employees"
Dim John100 As Employee = new Employee("John", "100xxx")
Emps.Add(John100)
Dim x As XmlSerializer = new XmlSerializer(GetType(Employees))
Dim writer As TextWriter = new StreamWriter(filename)
x.Serialize(writer, Emps)
writer.Close()
End Sub
End Class

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧