浅谈对象的序列化(Serialize)

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,就使得数据能够被轻松地存储和传输。

.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 来传输过程调用而设计的。

若要序列化或说白了就是为了数据通用,xml数据还能跨越防火墙

反序列化对象,请使用 XmlSerializer 类。若要创建要序列化的类,请使用 XML 架构定义工具。

主要是对象与流的相互转化。

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

posted on 2007-04-05 09:39  joyous jeny  阅读(415)  评论(0编辑  收藏  举报

导航