通州北大青鳥校區(qū)講解:自定義序列化

      通州北大青鳥校區(qū)學術部丁老師介紹:如果你希望讓用戶對類進行串行化,但是對數據流的組織方式不完全滿意,那么可以通過在自定義類中實現接口來自定義串行化行為。這個接口只有一個方法,GetObjectData. 這個方法用于將對類對象進行串行化所需要的數據填進SerializationInfo對象。你使用的格式化器將構造SerializationInfo對象,然后在串行化時調用GetObjectData. 如果類的父類也實現了ISerializable,那么應該調用GetObjectData的父類實現。

      如果你實現了ISerializable,那么還必須提供一個具有特定原型的構造器,這個構造器的參數列表必須與GetObjectData相同。這個構造器應該被聲明為私有的或受保護的,以防止粗心的開發(fā)人員直接使用它。

      示例如下:
      實現ISerializable的類:
      (通州北大青鳥校區(qū))    
       using System;
       using System.Data;
       using System.Configuration;
       using System.Web;
       using System.Web.Security;
       using System.Web.UI;
       using System.Web.UI.WebControls;
       using System.Web.UI.WebControls.WebParts;
       using System.Web.UI.HtmlControls;
       using System.Runtime.Serialization;
       using System.Runtime.Serialization.Formatters.Binary;
        /// <summary>
       /// Employee 的摘要說明
       /// </summary>
       [Serializable]
       public class Employee:ISerializable
        {
           public int EmpId=100;
           public string EmpName="劉德華";
           [NonSerialized]
           public string NoSerialString = "NoSerialString-Test";
           public Employee()
            {
               //
               // TODO: 在此處添加構造函數邏輯
               //
           }
           private Employee(SerializationInfo info, StreamingContext ctxt)
            {
               EmpId = (int)info.GetValue("EmployeeId", typeof(int));
               EmpName = (String)info.GetValue("EmployeeName",typeof(string));
               //NoSerialString = (String)info.GetValue("EmployeeString",typeof(string));
           }
           public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
            {
               info.AddValue("EmployeeId", EmpId);
               info.AddValue("EmployeeName", EmpName);
               //info.AddValue("EmployeeString", NoSerialString);
           }
       }(通州北大青鳥校區(qū)
       

          序列化和反序列化方法:
       public void OtherEmployeeClassTest()
            {
               Employee mp = new Employee();
               mp.EmpId = 10;
               mp.EmpName = "邱楓";
               mp.NoSerialString = "你好呀";
               Stream steam = File.Open("c:\\temp3.dat", FileMode.Create);
               BinaryFormatter bf = new BinaryFormatter();
               Response.Write("Writing Employee Info:");
               bf.Serialize(steam,mp);
               steam.Close();
               mp = null;
               //反序列化
               Stream steam2 = File.Open("c:\\temp3.dat", FileMode.Open);
               BinaryFormatter bf2 = new BinaryFormatter();
               Response.Write("Reading Employee Info:");
               Employee mp2 = (Employee)bf2.Deserialize(steam2);
               steam2.Close();
               Response.Write(mp2.EmpId);
               Response.Write(mp2.EmpName);
               Response.Write(mp2.NoSerialString);
           }
      通州北大青鳥校區(qū)學術部提供

      北大青鳥網上報名
      北大青鳥招生簡章
      主站蜘蛛池模板: 日韩精品一区二区三区在线观看| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲视频一区调教| www.亚洲一区| 精品国产一区二区三区在线| 国产内射在线激情一区| 无码人妻精品一区二区三区在线| 日韩电影一区二区| 精品人妻中文av一区二区三区| 国产无套精品一区二区| 亚洲一区中文字幕久久| 亚洲一区爱区精品无码| 91一区二区在线观看精品| 成人免费区一区二区三区| 国产高清在线精品一区小说 | 亚洲国产一区二区a毛片| 国产福利电影一区二区三区,日韩伦理电影在线福 | 一区二区日韩国产精品| 日韩在线视频不卡一区二区三区 | 久久一区二区三区精华液使用方法 | 国产福利一区二区三区视频在线| 日韩最新视频一区二区三| 国产一区二区精品| 国产精品日本一区二区在线播放| 成人免费观看一区二区| 亚洲欧美一区二区三区日产| 亚洲一区二区三区久久久久| 亚洲综合一区二区精品久久| 亚洲A∨精品一区二区三区下载| 国产第一区二区三区在线观看| 国产午夜精品一区二区三区小说| 亚洲av无码片区一区二区三区| 国产精品视频无圣光一区| 久久无码精品一区二区三区| 精品少妇ay一区二区三区 | 国产无线乱码一区二三区| 亚洲一区二区三区乱码在线欧洲| 日韩高清一区二区| 一区在线免费观看| 精品国产免费一区二区三区香蕉| 成人h动漫精品一区二区无码|