日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ASP.NET中序列化與反序列化-以顯示上一次登錄的信息為例

 路人甲Java 2021-03-24

場景

ASP.NET中新建Web網(wǎng)站并部署到IIS上(詳細(xì)圖文教程):

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

在上面博客中已經(jīng)將網(wǎng)站部署到了IIS上。

.NET Framework 為了保證數(shù)據(jù)的安全性,并不允許所有的對象都可序列化。

要序列化某對象,需要將該對象聲明為可序列化。把一個類標(biāo)識為可序列化只需要在類上添加注解Serializable。

要實現(xiàn)序列化,需要使用System.Runtime.Serialization.Formatters.Binary下的BinaryFormatter類。

該類提供了Serialize 和Deserialize兩個方法實現(xiàn)序列化和反序列化。

因為是要基于“流”的操作,所以需要使用System.IO下的FileStream類。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費下載。

實現(xiàn)

想要記錄一下系統(tǒng)最后一次用戶登錄的信息,包括登錄名、登錄時間、登錄IP。

紀(jì)錄以后在每次打開登錄頁面時顯示上一次登錄的信息。

僅僅只有一條信息,沒必要在數(shù)據(jù)庫中建個表。

新建一個Web窗體頁面Login.aspx,然后打開其設(shè)計視圖,拖拽幾個標(biāo)簽和輸入框

 

 

頁面代碼為:

    <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>

 

要序列化登錄信息對象,得新建一個登錄信息的類并標(biāo)記為可序列化

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) 
        {
            //創(chuàng)建二進(jìn)制格式對象
            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;
            //創(chuàng)建二進(jìn)制格式對象
            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);
        }

序列化完了,還需要在頁面加載的時候?qū)⑸洗涡蛄谢男畔⒄故镜巾撁嫔?,修改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

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約