• 20150317--序列化,反序列化(2)


    序列化,反序列化除了转二进制之外还有另外一种序列化的方法:Soap序列化。

    创建一个类,同样不要忘记序列化标记 [Serializable]

    [Serializable]
    
    public class StudentData
    {
       public StudentData()
       {
       }
    
        private string _Code;
    
        public string Code
        {
            get { return _Code; }
            set { _Code = value; }
        }
        private string _Name;
    
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
        private string _Nation;
    
        public string Nation
        {
            get { return _Nation; }
            set { _Nation = value; }
        }
    }

    在cs中的需要添加引用:

    using System.IO;//流

    using System.Runtime.Serialization.Formatters.Soap;//Soap类,

    Soap类需要先在项目上添加引用,右键--添加引用 到 引用管理器界面,搜索soap,选中并确定:

    image
    序列化与反序列化按钮的代码(请注意文中加粗部分,这里是与二进制序列化的主要区别):

    //序列化按钮
        protected void Button1_Click(object sender, EventArgs e)
        {
            stuDA ss = new stuDA
            {
                Code = TextBox1.Text,
                Name = TextBox2.Text,
                Nation = TextBox3.Text
            };
            FileStream fs = null;
            try
            {
                string path = Server.MapPath("data/bbb.txt");//映射服务器端的硬盘物理路径
                fs = new FileStream(path, FileMode.Create);//建立文件流
                SoapFormatter bf = new SoapFormatter();//soap格式化器
                bf.Serialize(fs, ss);//把对象序列化
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();//流使用后必须关闭。
                }
            }
        }
        //反序列化
        protected void Button2_Click(object sender, EventArgs e)
        {
            string path = Server.MapPath("data/bbb.txt");
            FileStream fs = null;
            try
            {
                fs = new FileStream(path, FileMode.Open);//使用流打开文件
    
                SoapFormatter by = new SoapFormatter();//soap转化器
    
                stuDA sdata = (stuDA)by.Deserialize(fs);//反序列化成对象
                Label1.Text = sdata.Code;
                Label2.Text = sdata.Name;
                Label3.Text = sdata.Nation;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
            }
        }

    在文本框中输入文字:

    image

    序列化结果:

    image

    这里可以很直观的看到对象中变量存储的文字信息。

    反序列化:

    image

    小结:二进制的序列化与Soap的序列化不可混用,用二进制方法进行的序列化,反序列化就必须用二进制的方法进行反序列化。此外,序列化可以放入SQL中,使用二进制序列化的流可以存放在SQL的img类型的列中。

  • 相关阅读:
    【bzoj4917】Hash Killer IV 乱搞
    【bzoj2770】YY的Treap 权值线段树
    【bzoj4898】[Apio2017]商旅 Floyd+分数规划+Spfa
    【GXZ的原创】平衡树性能测试
    【bzoj2969】矩形粉刷 期望
    【bzoj3325】[Scoi2013]密码 逆模拟Manacher
    【bzoj4974】字符串大师 逆模拟KMP
    【bzoj4987】Tree 树形背包dp
    【bzoj3672】[Noi2014]购票 斜率优化dp+CDQ分治+树的点分治
    【bzoj4325】NOIP2015 斗地主(&“加强”版) 搜索
  • 原文地址:https://www.cnblogs.com/Tirisfal/p/4343546.html
Copyright © 2020-2023  润新知