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

clnara921 2005-05-20 07:33:17
.NET序列化的实现机制,定制序列化,对序列化的适用情况哪位给我介绍一下
最好给点实例。
看了一些,不过很糊涂。不太清楚。
谢谢了!!!
...全文
143 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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

前言在互联网时代,分布式应用、系统变得越来越多,我们在使用 .Net 技术构建分布式系统的时候,需要使用到一些组件或者是助手库来帮助我们提高生产力以及应用程序解耦,但是纵观.Net圈,能够符合要求的这样的组件并不是 很多,并且没有一个通用的抽象组件能够将这些接口集成起来,今天就为大家介绍一款开源的组件库 Foundatio,他们同样出自于Exceptionless团队之手,下面就来看看吧。目录Foundatio 介绍Getting Started缓存队列锁消息工作任务文件存储度量日志示例程序源码总结Foundatio 介绍GitHub : https://github.com/exceptionless/FoundatioFoundatio 是一个插件式的,松耦合的一套构建分布式应用的程序库,出自于Exceptionless团队。Foundatio 同时支持 .NET Framework 4.6 和 .NET Core。通过 Foundatio 我可以获得哪些帮助呢?如果你是面对接口(抽象)构建的程序,你可以很容易的对接口实现进行切换。具有友好的依赖注入,还在使用 .Net Framework的朋友可以体验一下,它具有比Autofac,Unity等更简易的操作和更友好的接口。可以更加方便的使用缓存了,Foundatio帮助我们封装了很多缓存的客户端实现,比如RedisCache、InMemoryCache、ScopedCache等等。消息总线,你不必自己构建或者使用复杂且昂贵的NServiceBus了,很多时候我们仅仅需要的是一个可以在本地或者云上运行的简单的消息总线。存储,现在你可以很方便的通过一致的接口来使用分布式存储了,包括内存文件存储、文件夹文件存储,Azure文件存储,AWS S3文件存储。Foundatio 主要包含以下模块:缓存(Caching)队列(Queues)锁(Locks)消息(Messaging)工作任务(Jobs)文件存储(File Storage)度量(Metrics)日志(Logging)这些组件都以NuGet包的形式提供出来供我们很方便的使用,下面依次来看看每一个组件的用途和使用方法吧。Getting Started缓存缓存是一种空间换时间的技术,你可以通过缓存来快速的获取一些数据。Foundatio Cache 提供了一致的接口ICacheClient 来很容易的存储或者读取缓存数据,并且提供了4中不同的缓存客户端的实现。他们分别是:1、InMemoryCacheClient:内存缓存的实现,这种缓存的生命周期为当前进程, 有一个MaxItems属性,可以设置最多缓存多少条数据。2、HybridCacheClient:InMemoryCacheClient 具有相同的实现,但是此接口提供、IMessageBus 可以用来跨线程之间的同步。3、RedisCacheClient:一个 Redis 客户端的实现。4、RedisHybridCacheClient:一个RedisCacheClient 、InMemoryCacheClient 的混合实现,通过RedisMessageBus来保持内存缓存跨线程之间的同步。注意:如果本地缓存的项已经存在,在调用Redis进行序列化保存的时候可能会有性能问题。5、ScopedCacheClient:传入ICacheClient和scope,scope 可以设置一个字符串,来制定一个缓存键前缀,这样可以很方便的进行批量存储和删除。例子:using Foundatio.Caching; ICacheClient cache = new InMemoryCacheClient(); await cache.SetAsync("test", 1); var value = await cache.GetAsync("test");队列提供了一个先进,先出的消息管道,Foundatio 提供了一个IQueue接口,并且拥有 4 种不同的队列实现。1、InMemoryQueue:一个内存队列实现,队列的生命周期为当前进程。2、RedisQueue:一个 Redis 队列实现。3、AzureServiceBusQueue:一个基于Azure的服务消息队列实现。4、AzureStorageQueue:一个基于Azure的存储队列实现。例子:using Foundatio.Queues; IQueue queue = new InMemoryQueue();await queue.EnqueueAsync(new SimpleWorkItem {     Data = "Hello"});var

16,722

社区成员

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

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