ASP.NET中序列化与反序列化-以显示上一次登录的信息为例
场景
ASP.NET中新建Web网站并部署到IIS上(详细图文教程):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199747
在上面博客中已经将网站部署到了IIS上。
.NET Framework 为了保证数据的安全性,并不允许所有的对象都可序列化。
要序列化某对象,需要将该对象声明为可序列化。把一个类标识为可序列化只需要在类上添加注解Serializable。
要实现序列化,需要使用System.Runtime.Serialization.Formatters.Binary下的BinaryFormatter类。
该类提供了Serialize 和Deserialize两个方法实现序列化和反序列化。
因为是要基于“流”的操作,所以需要使用System.IO下的FileStream类。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
想要记录一下系统最后一次用户登录的信息,包括登录名、登录时间、登录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";//获取登录的信息并赋值给modelLoginModel 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{//反序列化文件到modelLoginModel 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
总结
以上是生活随笔为你收集整理的ASP.NET中序列化与反序列化-以显示上一次登录的信息为例的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: ASP.NET中使用Cache类来缓存页
- 下一篇: ASP.NET的项目怎样在Windows