浅谈对象的序列化(Serialize)

本文介绍了.NET Framework 的两种序列化技术,着重阐述 XML 序列化。它仅序列化公共属性和字段,不保留类型保真度,适合通过 Web 共享数据。XML 是开放式标准,可跨越防火墙,能将对象转换为符合 XSD 的 XML 流,用于分布式处理等场景,还可结合 SOAP 传输数据。

由优快云论坛中整理

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,就使得数据能够被轻松地存储和传输。 .NET Framework 提供两种序列化技术: 二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。 XML 序列化仅序列化公共属性和字段,且不保留类型保真度。当您希望提供或使用数据而不限制使用该数据的应用程序时,这很有用。由于 XML 是一个开放式标准,因此,对于通过 Web 共享数据,它是一个有吸引力的选择。SOAP 同样是一个开放式标准,这使它也成为一个颇具吸引力的选择。 例如: XML 序列化可具有多种形式,从简单的到复杂的都有。例如,可以序列化仅包含公共字段和属性的类,如介绍 XML 序列化中所示。下面的示例用于处理各种高级方案,包括如何使用 XML 序列化来生成符合特定 XML 架构 (XSD) 文档要求的 XML 流。 除了对公共类的实例进行序列化之外,DataSet 的实例也可以被序列化,如下面的示例所示: private void SerializeDataSet(string filename){ XmlSerializer ser = new XmlSerializer(typeof(DataSet)); // Creates a DataSet; adds a table, column, and ten rows. DataSet ds = new DataSet("myDataSet"); DataTable t = new DataTable("table1"); DataColumn c = new DataColumn("thing"); t.Columns.Add(c); ds.Tables.Add(t); DataRow r; for(int i = 0; i<10;i++){ r = t.NewRow(); r[0] = "Thing " + i; t.Rows.Add(r); } TextWriter writer = new StreamWriter(filename); ser.Serialize(writer, ds); writer.Close(); }

一般是把一个对象序列化是用来作传输用,用在分布式处理. 其他地也有应用.就说 dottext 这个程序吧,里面有几个象就使用了XML序列化,这样可以使用XML文件来配制对象.

XML 序列化将对象的公共字段和属性或者方法的参数和返回值转换(序列化)为符合特定 XML 架构定义语言 (XSD) 文档的 XML 流。XML 序列化产生强类型类,并为存储或传输目的将其公共属性和字段转换为序列格式(在此情况下,为 XML)。 由于 XML 是一种开放式标准,因此无论使用什么平台,任何应用程序都可根据需要处理 XML 流。例如,用 ASP.NET 创建的 XML Web services 使用 XmlSerializer 类创建 XML 流,用来在整个 Internet 中或 Intranet 上的 XML Web services 应用程序之间传递数据。相反地,反序列化获取这样的 XML 流并重新构造对象。 XML 序列化还可用于将对象序列化为符合 SOAP 规范的 XML 流。SOAP 是一种基于 XML 的协议,它是专门为使用 XML 来传输过程调用而设计的。 若要序列化或反序列化对象,请使用 XmlSerializer 类。若要创建要序列化的类,请使用 XML 架构定义工具。

说白了就是为了数据通用,xml数据还能跨越防火墙

主要是对象与流的相互转化。 比如客户端修改数据之后,希望进行判断再修改数据库;这就需要把数据库里的数据先取到DataSet;这个DataSet可以以session变量形式保存在Server端,也可以用ViewState形式发到页面里用带宽换Server的处理能力;如果是后者,就需要在DataSet和http流中转化,就需要序列化/反序列化。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值