zoukankan      html  css  js  c++  java
  • 对象的序列化和反序列化

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



  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/gdjlc/p/2086931.html
Copyright © 2011-2022 走看看