国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

序列化和反序列化簡單使用

2019-11-14 14:11:41
字體:
來源:轉載
供稿:網友
  序列化、反序列化主要用于存儲對象狀態為另一種通用格式,比如存儲為二進制、xml、json等等,把對象轉換成這種格式就叫序列化,而反序列化通常是從這種格式轉換回來。

  使用序列化主要是因為跨平臺和對象存儲的需求,因為網絡上只允許字符串或者二進制格式,而文件需要使用二進制流格式,如果想把一個內存中的對象存儲下來就必須使用序列化轉換為xml(字符串)、json(字符串)或二進制(流)。
  
 
  本例是二進制(流)的序列化和反序列化:
using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Linq;using System.Runtime.Serialization.Formatters.Binary;using System.Text;using System.Windows.Forms;namespace ServerManager{    public partial class TimeSeting : Form    {        public TimeSeting()        {            InitializeComponent();            this.FormClosing += (sender, e) => { e.Cancel = true; this.Visible = false; };        }        /// <summary>        /// 序列化所保存的路徑        /// </summary>        PRivate string strfile = null;        public string StrFile        {            get            {                if (strfile.IsNullOrWhiteSpace())                {                    string path = System.Reflection.Assembly.GetExecutingAssembly().Location;                    strfile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(path), "setting.Config");                }                return strfile;            }            set { strfile = value; }        }        /// <summary>        /// 保存設置 并序列化數據        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnSave_Click(object sender, EventArgs e)        {            try            {                if (txtStart.Text.IsNullOrWhiteSpace() || txtEnd.Text.IsNullOrWhiteSpace() || txtMinute.Text.IsNullOrWhiteSpace() || txtFailure.Text.IsNullOrWhiteSpace())                {                    MessageBox.Show("設置項不能為空!","提示",MessageBoxButtons.OK);                    return;                }                MainSetting newmainset = new MainSetting();                newmainset.SetStart = Convert.ToInt32(txtStart.Text);                newmainset.SetEnd = Convert.ToInt32(txtEnd.Text);                newmainset.SetMinute = Convert.ToInt32(txtMinute.Text);                newmainset.SetFailure = Convert.ToInt32(txtFailure.Text);                if (newmainset.SetFailure < 2)                {                    MessageBox.Show("失敗間隔不能小于2分鐘!");                    return;                }                if (newmainset.SetStart > newmainset.SetEnd)                {                    MessageBox.Show("開始時間不能小于結束時間!");                }                else                {                    MainSet = newmainset;                    Serialize(MainSet);                    this.Visible = false;                }            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }        /// <summary>        /// 序列化設置        /// </summary>        /// <param name="set"></param>        public void Serialize(MainSetting set)        {            using (FileStream fs = new FileStream(StrFile, FileMode.Create))            {                BinaryFormatter formatter = new BinaryFormatter();                formatter.Serialize(fs, set);                fs.Close();            }        }        MainSetting mainSet;        public MainSetting MainSet        {            get            {                if (mainSet == null)                {                    DeSerialize();                }                return mainSet;            }            set            {                mainSet = value;                Service.HostingSystemHelper.Instance.ExecMin = value.SetStart;                Service.HostingSystemHelper.Instance.ExecMax = value.SetEnd;                Service.HostingSystemHelper.Instance.SetMinute = value.SetMinute;                Service.HostingSystemHelper.Instance.SleepMinutes = value.SetFailure;            }        }        /// <summary>        /// 反序列化設置        /// </summary>        public void DeSerialize()        {            if (System.IO.File.Exists(StrFile))            {                using (FileStream fs = new FileStream(StrFile, FileMode.Open))                {                    BinaryFormatter formatter = new BinaryFormatter();                    MainSet = (MainSetting)(formatter.Deserialize(fs));                }            }            else            {                MainSet = new MainSetting() { SetStart = Service.HostingSystemHelper.Instance.ExecMin, SetEnd = Service.HostingSystemHelper.Instance.ExecMax, SetMinute = Service.HostingSystemHelper.Instance.SetMinute, SetFailure = Service.HostingSystemHelper.Instance.SleepMinutes };            }        }        /// <summary>        /// 加載設置        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void TimeSeting_Load(object sender, EventArgs e)        {            this.txtStart.Text = MainSet.SetStart + string.Empty;            this.txtMinute.Text = MainSet.SetMinute + string.Empty;            this.txtEnd.Text = MainSet.SetEnd + string.Empty;            this.txtFailure.Text = mainSet.SetFailure + string.Empty;        }        //如果輸入的不是數字鍵,也不是回車鍵、Backspace鍵,則取消該輸入        private void txtStart_KeyPress(object sender, KeyPressEventArgs e)        {            if (!(Char.IsNumber(e.KeyChar)) && e.KeyChar != (char)13 && e.KeyChar != (char)8)            {                e.Handled = true;            }        }        //如果輸入的不是數字鍵,也不是回車鍵、Backspace鍵,則取消該輸入        private void txtEnd_KeyPress(object sender, KeyPressEventArgs e)        {            if (!(Char.IsNumber(e.KeyChar)) && e.KeyChar != (char)13 && e.KeyChar != (char)8)            {                e.Handled = true;            }        }        //如果輸入的不是數字鍵,也不是回車鍵、Backspace鍵,則取消該輸入        private void txtMinute_KeyPress(object sender, KeyPressEventArgs e)        {            if (!(Char.IsNumber(e.KeyChar)) && e.KeyChar != (char)13 && e.KeyChar != (char)8)            {                e.Handled = true;            }        }        //如果輸入的不是數字鍵,也不是回車鍵、Backspace鍵,則取消該輸入        private void txtFailure_KeyPress(object sender, KeyPressEventArgs e)        {            if (!(Char.IsNumber(e.KeyChar)) && e.KeyChar != (char)13 && e.KeyChar != (char)8)            {                e.Handled = true;            }        }    }    [Serializable]    public class MainSetting    {        public int SetStart        {            get;            set;        }        public int SetEnd        {            get;            set;        }        public int SetMinute        {            get;            set;        }        public int SetFailure        {            get;            set;        }    }}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南漳县| 阿拉善右旗| 平原县| 淄博市| 玛曲县| 黑水县| 江华| 宁都县| 盐山县| 汤阴县| 津南区| 青浦区| 巨鹿县| 裕民县| 阿合奇县| 盘山县| 大同县| 萨嘎县| 旺苍县| 济宁市| 惠州市| 东城区| 武鸣县| 怀柔区| 桓台县| 南丹县| 铜川市| 抚远县| 鱼台县| 巩义市| 荣昌县| 安多县| 宁蒗| 会同县| 应用必备| 金川县| 额尔古纳市| 红河县| 读书| 青浦区| 南宫市|