• 对象的序列化和反序列化


    Default.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>对象的序列化和反序列化</title>
    </head>
    <body>
    <form id="form1" runat="server">
    用户ID: <asp:TextBox ID="txtUserID" runat="server"></asp:TextBox><br />
    用户名: <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox><br />
    用户生日: <asp:TextBox ID="txtAge" runat="server"></asp:TextBox><br />
    <asp:Button ID="btnSerializeToCookies" runat="server" Text="序列化" OnClick="btnSerializeToCookies_Click" />
    <asp:Button ID="btnDeserializeByCookies" runat="server" Text="反序列化" OnClick="btnDeserializeByCookies_Click" /><br />
    <asp:Label ID="lblShow" runat="server" Width="210px"></asp:Label>
    </form>
    </body>
    </html>


    Default.aspx.cs

        using System; 
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.IO;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Formatters.Binary;
    namespace WebApplication1
    {
    /* gdjlc 2009年12月14日 */
    public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    //定义序列化的类时必须加上[Serializable]属性
    [Serializable]
    public class User : IDeserializationCallback
    {
    public User(int userID, string userName, DateTime birthDay)
    {
    this.userID = userID;
    this.userName = userName;
    this.birthDay = birthDay;
    }
    private int userID;
    private string userName;
    private DateTime birthDay;
    [NonSerialized]
    private int age; //年龄依赖于生日,不参与序列化
    /// <summary>
    /// 用户ID
    /// </summary>
    public int UserID
    {
    get { return userID; }
    set { userID = value; }
    }
    /// <summary>
    /// 用户名
    /// </summary>
    public string UserName
    {
    get { return userName; }
    set { userName = value; }
    }
    /// <summary>
    /// 生日
    /// </summary>
    public DateTime BirthDay
    {
    get { return birthDay; }
    set { birthDay = value; }
    }
    /// <summary>
    /// 年龄
    /// </summary>
    public int Age
    {
    get { return age; }
    set { age = value; }
    }
    //反序列化完成时自动调用这一方法
    void IDeserializationCallback.OnDeserialization(object sender)
    {
    age = DateTime.Now.Year - birthDay.Year;
    }
    }

    //写入Cookies
    protected void btnSerializeToCookies_Click(object sender, EventArgs e)
    {
    User user = new User(int.Parse(txtUserID.Text), txtUserName.Text, Convert.ToDateTime(txtAge.Text));
    Response.Cookies["User"].Value = SerializeObj(user);
    Response.Cookies["User"].Expires = DateTime.Now.AddMinutes(30);
    }
    //从Cookies中读取
    protected void btnDeserializeByCookies_Click(object sender, EventArgs e)
    {
    if (Request.Cookies["User"] != null)
    {
    User user = DeserializeObj(Request.Cookies["User"].Value);
    lblShow.Text = user.UserID + "-" + user.UserName + "-" + user.BirthDay + "-" + user.Age;
    }
    }
    // 序列化对象
    public static string SerializeObj(User user)
    {
    using (MemoryStream ms = new MemoryStream())
    {
    IFormatter formatter = new BinaryFormatter();
    formatter.Serialize(ms, user);
    return Convert.ToBase64String(ms.ToArray());
    }
    }
    // 反序列化对象
    public static User DeserializeObj(string str)
    {
    byte[] buf = Convert.FromBase64String(str);
    using (MemoryStream ms = new MemoryStream(buf))
    {
    IFormatter formatter = new BinaryFormatter();
    User user = formatter.Deserialize(ms) as User;
    return user;
    }
    }
    }
    }



  • 相关阅读:
    python3中类(class)的一些概念
    python 第三方库paramiko
    阿里云盘PC版开放了
    解决c#,wpf程序带环境安装包体积太大问题
    【利用静态网站传输数据】
    【.net】创建属于自己的log组件——改进版
    ThingsBoard 3.2.2 发布
    mac 安装pip2
    cocos creator2.4.3 内存优化总结
    cocos creator2.4.3 组件 节点 预制体
  • 原文地址:https://www.cnblogs.com/gdjlc/p/2086931.html
Copyright © 2020-2023  润新知