日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時(shí)間:2025/3/19 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET中序列化与反序列化-以显示上一次登录的信息为例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

場(chǎng)景

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ù)的安全性,并不允許所有的對(duì)象都可序列化。

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

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

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

因?yàn)槭且凇傲鳌钡牟僮?#xff0c;所以需要使用System.IO下的FileStream類。

注:

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

實(shí)現(xiàn)

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

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

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

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

?

頁(yè)面代碼為:

??? <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 />登錄時(shí)間:<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><br />IP:<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label></div></form>

要序列化登錄信息對(duì)象,得新建一個(gè)登錄信息的類并標(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文件里添加兩個(gè)用于序列化和反序列化對(duì)象的方法

??????? /// <summary>/// 序列化對(duì)象/// </summary>/// <param name="fileName"></param>/// <param name="lo"></param>private void Serializable(string fileName,LoginModel lo){//創(chuàng)建二進(jìn)制格式對(duì)象BinaryFormatter bf = new BinaryFormatter();//序列化到文件中using(FileStream fs = new FileStream(fileName,FileMode.OpenOrCreate)){bf.Serialize(fs,lo);}}/// <summary>/// 反序列化對(duì)象/// </summary>/// <param name="fileName"></param>/// <returns></returns>private LoginModel Deserializable(string fileName){LoginModel lo = null;//創(chuàng)建二進(jìn)制格式對(duì)象BinaryFormatter bf = new BinaryFormatter();//反序列化對(duì)象using(FileStream fs = new FileStream(fileName,FileMode.Open)){lo = bf.Deserialize(fs) as LoginModel;}return lo;}

然后修改登錄按鈕的點(diǎn)擊事件

??????? protected void Button1_Click(object sender, EventArgs e){//序列化文件的路徑string fileName = Server.MapPath("~/") + "lastLogin.txt";//獲取登錄的信息并賦值給modelLoginModel lo = new LoginModel(){LoginName = this.TextBox1.Text,LoginTime = DateTime.Now,LoginIp = Request.UserHostAddress};//將model對(duì)象序列化到文件this.Serializable(fileName,lo);}

序列化完了,還需要在頁(yè)面加載的時(shí)候?qū)⑸洗涡蛄谢男畔⒄故镜巾?yè)面上,修改Page_Load方法

?

?????? protected void Page_Load(object sender, EventArgs e){//獲取序列化文件路徑string fileName = Server.MapPath("~/") + "lastLogin.txt";try{//反序列化文件到modelLoginModel lo = this.Deserializable(fileName);//給頁(yè)面上賦值this.Label1.Text = lo.LoginName;this.Label2.Text = lo.LoginTime.ToString();this.Label3.Text = lo.LoginIp;}catch {}}

運(yùn)行項(xiàng)目,然后訪問Login.aspx頁(yè)面

?

然后來(lái)到項(xiàng)目所在目錄下,找到并打開lastLogin.txt

?

總結(jié)

以上是生活随笔為你收集整理的ASP.NET中序列化与反序列化-以显示上一次登录的信息为例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。