zoukankan      html  css  js  c++  java
  • 如何理解C#中的序列化与反序列化【转】

    序列化(Serialization)是.NET平台最酷的特性之一。
    1、为什么要序列化:
    首先你应该明白系列化的目的就不难理解他了。序列化的目的就是能在网络上传输对象,否则就无法实现面向对象的分布式计算。比如你的客户端要调用服务器上的一个方法获得一个产品对象,比如方法为:public   Product   findProduct(int   product_id);  
      注意该方法返回一个Product对象,如果没有系列化技术,客户端就收不到返回的对象Product。而序列化的实现就是把对象变成一个可在网络上传输的字节流。

    2、利用序列化技术,可以实现对象的备份和还原。序列化可以将内存中的对象(或对象图)序列化为数据流,并保存到磁盘上进行持久化;还可以将数据流反序列化为对象,实现对象的还原。序列化技术在分布式系统的数据传输中得到充分的利用,如:XML Web Service 利用XML序列化实现跨平台,.NET Remoting 则用到了二进制序列化和SOAP序列化。

    .NET Compact Framework 2.0 支持XML序列化,不支持二进制序列化和SOAP序列化。而 .NET Compact Framework 1.0 连XML序列化都不支持。不过 OpenNETCF 1.x 为 .NET CF 1.0 实现了一个XML序列化的类,这个类在 OpenNETCF.Xml.dll 程序集中可以找到。

    序列化和反序列化用于将一个对象保存到文件,和从文件读取。  
      using   System.IO;  
      using   System.Runtime.Serialization.Formatters.Binary;  
      [Serializable()]//可以序列化的类需要用这个属性标记  
      public   class   ToBeSerialized  
      {  
      public   int   a;  
      public   string   b;  
      public   ToBeSerialized(int   a,string   b)  
      {  
      this.a=a;  
      this.b=b;  
      }  
      }  
      public   class   Test  
      {  
       
      public   void   Serialize()//序列化  
      {  
      ToBeSerialized   tbs = new   ToBeSerialized(22,"SOM");  
      Stream   fs   =   File.Create("Serialized.txt");  
      BinaryFormatter   serializer   =   new   BinaryFormatter();  
      serializer.Serialize(fs,   tbs);  
      fs.Close();  
      }  
      public   void   DeSerialize()//反序列化  
      {  
      ToBeSerialized   restore;  
      Stream   fs   =   File.OpenRead("Serialized.txt");  
      BinaryFormatter   deserializer   =   new   BinaryFormatter();  
      restore   =   (ToBeSerialized)(deserializer.Deserialize(fs));//反序列化得到的对象  
      fs.Close();  
      }   
      }

    在 .NET CF 2.0 中使用XML序列化很简单,跟 .NET Framework 中的一样。

    // XML序列化 Customer 数组

    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())

    {

    Customer[] customers = GetCustomers(); //从数据库或远程服务器获取客户

    System.Xml.Serialization.XmlSerializer ser =

    new System.Xml.Serialization.XmlSerializer(typeof(Customer));

    ser.Serialize(ms, customers);

    byte[] buffer = ms.ToArray();

    // 获取XML文档的内容

    string xml = System.Text.Encoding.ASCII.GetString(buffer , 0, buffer .Length);

    }

    // XML反序列化 Customer 数组

    using (System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer))

    {

    System.Xml.Serialization.XmlSerializer ser =

    new System.Xml.Serialization.XmlSerializer(typeof(Customer));

    Customer[] customers = ser.Deserialize(ms) as Customer[];

    }

    以上示例将对象序列化后,写入内存流中。你可以换成文件流(FileStream),这样就可以实现对象的持久化。

  • 相关阅读:
    SGU 176.Flow construction (有上下界的最大流)
    POJ 2391.Ombrophobic Bovines (最大流)
    poj 1087.A Plug for UNIX (最大流)
    poj 1273.PIG (最大流)
    POJ 2112.Optimal Milking (最大流)
    SGU 196.Matrix Multiplication
    SGU 195. New Year Bonus Grant
    关于multicycle path
    ppt做gif动图
    codeforces 598A Tricky Sum
  • 原文地址:https://www.cnblogs.com/alexzp/p/2280175.html
Copyright © 2011-2022 走看看