ASP.NET中序列化与反序列化-以显示上一次登陆的信息为例

场景

ASP.NET中新建Web网站并部署到IIS上(详细图文教程):数据库

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199747编程

在上面博客中已经将网站部署到了IIS上。安全

.NET Framework 为了保证数据的安全性,并不容许全部的对象均可序列化。网站

要序列化某对象,须要将该对象声明为可序列化。把一个类标识为可序列化只须要在类上添加注解Serializable。this

要实现序列化,须要使用System.Runtime.Serialization.Formatters.Binary下的BinaryFormatter类。spa

该类提供了Serialize 和Deserialize两个方法实现序列化和反序列化。.net

由于是要基于“流”的操做,因此须要使用System.IO下的FileStream类。设计

注:code

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。orm

实现

想要记录一下系统最后一次用户登陆的信息,包括登陆名、登陆时间、登陆IP。

纪录之后在每次打开登陆页面时显示上一次登陆的信息。

仅仅只有一条信息,不必在数据库中建个表。

新建一个Web窗体页面Login.aspx,而后打开其设计视图,拖拽几个标签和输入框

 

 

页面代码为:

    <form id="form1" runat="server">
    <div>
    
        用户名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        密 码:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="登陆" />
        <br />
        <br />
        上次登陆信息-------------------<br />
        用户名:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <br />
        登陆时间:<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
        <br />
        IP:<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
    
    </div>
    </form>

 

要序列化登陆信息对象,得新建一个登陆信息的类并标记为可序列化

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace DeployTest.Models
{
    [Serializable]
    public class LoginModel
    {
        private string _loginName;

        public string LoginName
        {
            get { return _loginName; }
            set { _loginName = value; }
        }

        private DateTime _loginTime;

        public DateTime LoginTime
        {
            get { return _loginTime; }
            set { _loginTime = value; }
        }

        private string _loginIp;

        public string LoginIp
        {
            get { return _loginIp; }
            set { _loginIp = value; }
        }

   

    }
}

在Login.aspx.cs文件里添加两个用于序列化和反序列化对象的方法

        /// <summary>
        /// 序列化对象
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="lo"></param>
        private void Serializable(string fileName,LoginModel lo) 
        {
            //建立二进制格式对象
            BinaryFormatter bf = new BinaryFormatter();
            //序列化到文件中
            using(FileStream fs = new FileStream(fileName,FileMode.OpenOrCreate))
            {
                bf.Serialize(fs,lo);
            }
        }

        /// <summary>
        /// 反序列化对象
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private LoginModel Deserializable(string fileName)
        {
            LoginModel lo = null;
            //建立二进制格式对象
            BinaryFormatter bf = new BinaryFormatter();
            //反序列化对象
            using(FileStream fs = new FileStream(fileName,FileMode.Open))
            {
                lo = bf.Deserialize(fs) as LoginModel;
            }
            return lo;
        }

而后修改登陆按钮的点击事件

        protected void Button1_Click(object sender, EventArgs e)
        {
            //序列化文件的路径
            string fileName = Server.MapPath("~/") + "lastLogin.txt";
            //获取登陆的信息并赋值给model
            LoginModel lo = new LoginModel()
            {
                LoginName = this.TextBox1.Text,
                LoginTime = DateTime.Now,
                LoginIp = Request.UserHostAddress
            };
            //将model对象序列化到文件
            this.Serializable(fileName,lo);
        }

序列化完了,还须要在页面加载的时候将上次序列化的信息展现到页面上,修改Page_Load方法

        protected void Page_Load(object sender, EventArgs e)
        {
            //获取序列化文件路径
            string fileName = Server.MapPath("~/") + "lastLogin.txt";
            try
            {
                //反序列化文件到model
                LoginModel lo = this.Deserializable(fileName);
                //给页面上赋值
                this.Label1.Text = lo.LoginName;
                this.Label2.Text = lo.LoginTime.ToString();
                this.Label3.Text = lo.LoginIp;
            }
            catch { 
            
            }
        }

运行项目,而后访问Login.aspx页面

 

 

而后来到项目所在目录下,找到并打开lastLogin.txt

 

 

相关文章
相关标签/搜索