2020-07-10

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";   //获取登录的信息并赋值给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

 

 

ASP.NET中序列化与反序列化转运四方邮乐购物商城askme在刷买家账户的是时候,如何用editthiscookie 导入缓存?福利!亚马逊斥巨资为prime会员实现免费1日送达计划!2019中国(厦门)跨境电商行业盛典成功举办!珠海长隆游特价团珠海长隆游特价团珠海长隆游特价团

No comments:

Post a Comment