對象 序列化 反序列化

/************************************************************************************
 *      Copyright (C) 2008 supesoft.com,All Rights Reserved                            *
 *      File:                                                                        *
 *                EventMessage.cs                                                           *
 *      Description:                                                                *
 *                 日誌消息類                                                         *
 *      Author:                                                                        *
 *                Lzppcc                                                                *
 *                [email protected]                                                    *
 *                http://www.supesoft.com                                                *
 *      Finish DateTime:                                                            *
 *                2007年8月6日                                                        *
 *      History:                                                                    *
 ***********************************************************************************/
using System;
using System.Collections.Generic;
using System.Text;

using System.IO;
using System.IO.Compression;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using FrameWork.Components;

namespace FrameWork
{
    /// <summary>
    /// 日誌消息類
    /// </summary>
    public class EventMessage
    {

        /// <summary>
        /// 信息提示類
        /// </summary>
        /// <param name="M_Type">類型1:操作日誌2:安全日誌</param>
        /// <param name="M_Title">標題</param>
        /// <param name="M_Body">內容</param>
        /// <param name="M_IconType">Icon類型</param>
        /// <param name="Url">Url</param>
        public static void MessageBox(int M_Type, string M_Title, string M_Body, Icon_Type M_IconType,string Url)
        {
            MessageBox(M_Type, M_Title, M_Body, M_IconType, Url,UrlType.Href);
        }

        /// <summary>
        /// 信息提示類
        /// </summary>
        /// <param name="M_Type">類型1:操作日誌2:安全日誌</param>
        /// <param name="M_Title">標題</param>
        /// <param name="M_Body">內容</param>
        /// <param name="M_IconType">Icon類型</param>
        /// <param name="Url">Url</param>
        /// <param name="ReturnScript">執行Script腳本字符串(需加<script></script>)</param>
        public static void MessageBox(int M_Type, string M_Title, string M_Body, Icon_Type M_IconType, string Url, string ReturnScript)
        {
            MessageBox(M_Type, M_Title, M_Body, M_IconType, true, Url, UrlType.Href, ReturnScript);
        }

        /// <summary>
        /// 信息提示類
        /// </summary>
        /// <param name="M_Type">類型1:操作日誌2:安全日誌</param>
        /// <param name="M_Title">標題</param>
        /// <param name="M_Body">內容</param>
        /// <param name="M_IconType">Icon類型</param>
        /// <param name="Url">Url</param>
        /// <param name="M_UrlType">按鈕鏈接類型</param>
        public static void MessageBox(int M_Type, string M_Title, string M_Body, Icon_Type M_IconType, string Url,UrlType M_UrlType)
        {
            MessageBox(M_Type, M_Title, M_Body, M_IconType, true, Url, M_UrlType,"");
        }

        /// <summary>
        /// 信息提示類
        /// </summary>
        /// <param name="M_Type">類型1:操作日誌2:安全日誌</param>
        /// <param name="M_Title">標題</param>
        /// <param name="M_Body">內容</param>
        /// <param name="M_IconType">icon類型</param>
        /// <param name="M_WriteToDB">是否寫入DB</param>
        /// <param name="Url">鏈接地址</param>
        /// <param name="M_UrlType">鏈接類型</param>
        /// <param name="ReturnScript">執行Script腳本字符串(需加<script></script>)</param>
        public static void MessageBox(int M_Type, string M_Title, string M_Body, Icon_Type M_IconType, bool M_WriteToDB, string Url, UrlType M_UrlType,string ReturnScript)
        {
            List<sys_NavigationUrl> M_ButtonList = new List<sys_NavigationUrl>();
            M_ButtonList.Add(new sys_NavigationUrl("確定", Url, "", M_UrlType, true));
            MessageBox(M_Type, M_Title, M_Body, M_IconType, M_WriteToDB, M_ButtonList,ReturnScript);
        }
        /// <summary>
        ///  信息提示
        /// </summary>
        /// <param name="M_Type">類型1:操作日誌2:安全日誌</param>
        /// <param name="M_Title">標題</param>
        /// <param name="M_Body">內容</param>
        /// <param name="M_IconType">icon類型</param>
        /// <param name="M_WriteToDB">是否寫入db</param>
        /// <param name="M_ButtonList">按鈕類型</param>
        /// <param name="M_ReturnScript">執行Script腳本字符串(需加<script></script>)</param>
        public static void MessageBox(int M_Type, string M_Title, string M_Body, Icon_Type M_IconType, bool M_WriteToDB, List<sys_NavigationUrl> M_ButtonList, string M_ReturnScript)
        {
            MessageBox mbx = new MessageBox();
            mbx.M_Body = M_Body;
            mbx.M_ButtonList = M_ButtonList;
            mbx.M_IconType = M_IconType;
            mbx.M_Title = M_Title;
            mbx.M_Type = M_Type;
            mbx.M_WriteToDB = M_WriteToDB;
            mbx.M_ReturnScript = M_ReturnScript;
            MessageBox(mbx);
        }

        /// <summary>
        /// 信息提示
        /// </summary>
        /// <param name="MBx">信息提示類</param>
        public static void MessageBox(MessageBox MBx)
        {
            if (MBx.M_WriteToDB)
            {
                EventWriteDB(MBx.M_Type, MBx.M_Body);
            }
            if (MBx.M_ButtonList.Count > 0)
            {
                System.Web.HttpContext.Current.Response.Cookies[string.Format("{0}-MessageValue",Common.Get_CookiesName)].Value = Serializable_MessageBox(Serializable_MessageBox(MBx),true);
                //System.Web.HttpContext.Current.Response.Cookies[string.Format("{0}-MessageValue1", Common.Get_CookiesName)].Value = Serializable_MessageBox(Serializable_MessageBox(MBx), false);
                //System.Web.HttpContext.Current.Session[string.Format("{0}-MessageValue", Common.Get_CookiesName)] = MBx;
                //FrameWorkCache.Instance().Insert(string.Format("{0}-MessageValue", Common.Get_CookiesName), MBx);
                System.Web.HttpContext.Current.Response.Redirect(string.Format("~/Manager/Messages.aspx?OPID={0}",Common.RndNum(5)));
            }            
        }

        /// <summary>
        /// 寫入日誌到DB
        /// </summary>
        /// <param name="E_Type">日誌類型:日記類型,1:操作日記2:安全日誌</param>
        /// <param name="E_Record">日誌內容</param>
        public static void EventWriteDB(int E_Type, string E_Record)
        {
            EventWriteDB(E_Type, E_Record, Common.Get_UserID);
        }

        /// <summary>
        /// 寫入日誌到DB
        /// </summary>
        /// <param name="E_Type">日誌類型:日記類型,1:操作日記2:安全日誌</param>
        /// <param name="E_Record">日誌內容</param>
        /// <param name="userid">關聯用戶id</param>
        public static void EventWriteDB(int E_Type, string E_Record, int userid)
        {
            sys_EventTable s_Et = new sys_EventTable();
            s_Et.E_DateTime = DateTime.Now;
            s_Et.E_From = Common.GetScriptUrl;
            s_Et.E_IP = Common.GetIPAddress();
            s_Et.E_Record = E_Record;
            s_Et.E_UserID = userid;
            s_Et.E_U_LoginName = UserData.Get_sys_UserTable(s_Et.E_UserID).U_LoginName;
            s_Et.E_Type = E_Type;
            s_Et.DB_Option_Action_ = "Insert";
            Permission PMI = FrameWorkPermission.Get_Permission;
            if (PMI != null)
            {
                s_Et.E_ApplicationID = PMI.ApplicationID;
                s_Et.E_A_AppName = BusinessFacade.sys_ApplicationsDisp(PMI.ApplicationID).A_AppName;
                s_Et.E_M_PageCode = PMI.PageCode;
                s_Et.E_M_Name = BusinessFacade.sys_ModuleDisp(PMI.ApplicationID, PMI.PageCode).M_CName;
            }
            BusinessFacade.sys_EventInsertUpdate(s_Et);
        }

        /// <summary>
        /// 序列化MessageBox類
        /// </summary>
        /// <param name="MBx">MessageBox類</param>
        /// <returns>字符數組</returns>
        public static byte[] Serializable_MessageBox(MessageBox MBx)
        {
            IFormatter formatter = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            byte[] b;
            formatter.Serialize(ms, MBx);
            ms.Position = 0;
            b = new byte[ms.Length];
            ms.Read(b, 0, b.Length);
            ms.Close();
            return b;
        }

        /// <summary>
        /// 將字節數組轉爲ASCII字符
        /// </summary>
        /// <param name="MessageArray">字節數組</param>
        /// <returns></returns>
        public static string Serializable_MessageBox(byte[] MessageArray)
        {
            return Convert.ToBase64String(MessageArray);
        }

        /// <summary>
        /// 將字節數組轉爲ASCII字符(是否進行Gzip壓縮)
        /// </summary>
        /// <param name="MessageArray">字節數組</param>
        /// <param name="isgzip">是否啓用gzip</param>
        /// <returns>返回字符</returns>
        public static string Serializable_MessageBox(byte[] MessageArray, bool isgzip)
        {
            if (isgzip)
            {
                MemoryStream ms = new MemoryStream();
                Stream s = new GZipStream(ms, CompressionMode.Compress);
                s.Write(MessageArray, 0, MessageArray.Length);
                s.Close();
                MessageArray = (byte[])ms.ToArray();
                ms.Dispose();
                ms.Close();
                s.Dispose();
            }
            return Serializable_MessageBox(MessageArray);
        }
        /// <summary>
        /// 反序列化MessageBox類
        /// </summary>
        /// <param name="BytArray">字節內容</param>
        /// <returns></returns>
        public static MessageBox Deserialize_MessageBox(byte[] BytArray)
        {
            IFormatter formatter = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            ms.Write(BytArray, 0, BytArray.Length);
            ms.Position = 0;
            MessageBox MBx = (MessageBox)formatter.Deserialize(ms);
            return MBx;            
        }

        /// <summary>
        /// 將字符按ASCII轉爲字節數組
        /// </summary>
        /// <param name="Messages">字符</param>
        /// <returns>字節流</returns>
        public static byte[] Deserialize_MessageBox(string Messages)
        {
            return Convert.FromBase64String(Messages);
        }

        /// <summary>
        /// 將字符按ASCII轉爲字節數組(是否進行Gzip壓縮)
        /// </summary>
        /// <param name="Messages">字符</param>
        /// <param name="isgzip">字符是否進行過gzip壓縮</param>
        /// <returns>字節流</returns>
        public static byte[] Deserialize_MessageBox(string Messages,bool isgzip)
        {
            byte[] BytArray  =  Deserialize_MessageBox(Messages);
            if (isgzip)
            {
                MemoryStream ms = new MemoryStream();
                GZipStream s = new GZipStream(new MemoryStream(BytArray), CompressionMode.Decompress);
                
                byte[] bytes = new byte[4096];
                int n;
                while ((n = s.Read(bytes, 0, bytes.Length)) != 0)
                {
                    ms.Write(bytes, 0, n);
                }

                s.Close();
                BytArray = (byte[])ms.ToArray();
                ms.Dispose();
                ms.Close();
                s.Dispose();
            }
            return BytArray;
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章