对象 序列化 反序列化

来源:互联网 发布:淘宝优惠券短链接转换 编辑:程序博客网 时间:2024/05/01 23:53

/************************************************************************************
 *      Copyright (C) 2008 supesoft.com,All Rights Reserved                            *
 *      File:                                                                        *
 *                EventMessage.cs                                                           *
 *      Description:                                                                *
 *                 日志消息类                                                         *
 *      Author:                                                                        *
 *                Lzppcc                                                                *
 *                Lzppcc@hotmail.com                                                    *
 *                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;
        }
    }
}