.NET开发不可不知、不可不用的辅助类(二)

序列化及反序列化的辅助类SerializeUtil

    /// <summary>
    /// 序列化及反序列化的辅助类
    /// </summary>
    public sealed class SerializeUtil
    {
        private SerializeUtil()
        {
        }

        序列化操作函数

        反序列化操作函数

        /// <summary>
        /// 获取对象的转换为二进制的字节大小
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static long GetByteSize(object obj)
        {
            long result;
            BinaryFormatter bFormatter = new BinaryFormatter();
            using (MemoryStream stream = new MemoryStream())
            {
                bFormatter.Serialize(stream, obj);
                result = stream.Length;
            }
            return result;
        }

        /// <summary>
        /// 克隆一个对象
        /// </summary>
        /// <param name="obj">待克隆的对象</param>
        /// <returns>克隆的一个新的对象</returns>
        public static object Clone(object obj)
        {
            object cloned = null;
            BinaryFormatter bFormatter = new BinaryFormatter();
            using (MemoryStream memoryStream = new MemoryStream())
            {
                try
                {
                    bFormatter.Serialize(memoryStream, obj);
                    memoryStream.Seek(0, SeekOrigin.Begin);
                    cloned = bFormatter.Deserialize(memoryStream);
                }
                catch //(Exception e)
                {
                    ;
                }
            }

            return cloned;
        }

        /// <summary>
        /// 从文件中读取文本内容
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <returns>文件的内容</returns>
        public static string ReadFile(string path)
        {
            string content = string.Empty;
            using (StreamReader reader = new StreamReader(path))
            {
                content = reader.ReadToEnd();
            }

            return content;
        }

        /// <summary>
        /// 读取嵌入资源的文本内容
        /// </summary>
        /// <param name="fileWholeName">包含命名空间的嵌入资源文件名路径</param>
        /// <returns>文件中的文本内容</returns>
        public static string ReadFileFromEmbedded(string fileWholeName)
        {
            string result = string.Empty;

            Assembly assembly = Assembly.GetEntryAssembly();
            using (TextReader reader = new StreamReader(assembly.GetManifestResourceStream(fileWholeName)))
            {
                result = reader.ReadToEnd();
            }

            return result;
        }
    }

序列化及反序列化的辅助类SerializeUtil测试代码

    public class TestSerializeUtil
    {
        public static string Execute()
        {
            string result = string.Empty;
            result += "使用SerializeUtil序列化及反序列化的辅助类:" + "\r\n";
            
            Person person = new Person();
            person.Name = "wuhuacong";
            person.Age = 20;
            
            byte[] bytes = SerializeUtil.SerializeToBinary(person);
            Person person2 = SerializeUtil.DeserializeFromBinary(typeof (Person), bytes) as Person;
            result += ReflectionUtil.GetProperties(person2) + "\r\n";
            
            string xml = SerializeUtil.SerializeToXml(person);
            Person person3 = SerializeUtil.DeserializeFromXml(typeof (Person), xml) as Person;
            result += "person3:\r\n" + ReflectionUtil.GetProperties(person3) + "\r\n";
            
            result += "SerializeUtil.GetByteSize(person3):" + SerializeUtil.GetByteSize(person3) + "\r\n";
            
            Person person4 = SerializeUtil.Clone(person3) as Person;
            result += "person4:\r\n" + ReflectionUtil.GetProperties(person4) + "\r\n";
            
            result += "Util.AreObjectsEqual(person3, person4):" + Util.AreObjectsEqual(person3, person4)+ "\r\n";
            
            SerializeUtil.SerializeToXmlFile(person3, Util.CurrentPath + "person3.xml", FileMode.Create);
            Person person5 = SerializeUtil.DeserializeFromXmlFile(typeof (Person), Util.CurrentPath + "person3.xml") as Person;
            result += "person5:\r\n" + ReflectionUtil.GetProperties(person5) + "\r\n\r\n";
            
            result += SerializeUtil.ReadFile(Util.CurrentPath + "person3.xml") + "\r\n\r\n";
            result += SerializeUtil.ReadFileFromEmbedded("TestUtilities.EmbedFile.xml") + "\r\n\r\n";

            return result;
        }
    }

数据库字段NULL值转换辅助类SmartDataReader

    /// <summary>
    /// 用来转换含有NULL值的字段为合适值的辅助类
    /// </summary>
    public sealed class SmartDataReader
    {
        private DateTime defaultDate;

        public SmartDataReader(IDataReader reader)
        {
            defaultDate = Convert.ToDateTime("01/01/1900");
            this.reader = reader;
        }

        public int GetInt32(String column)
        {
            int data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (int) 0 : (int) reader[column];
            return data;
        }

        public short GetInt16(String column)
        {
            short data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (short) 0 : (short) reader[column];
            return data;
        }

        public byte GetByte(String column)
        {
            byte data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (byte) 0 : (byte) reader[column];
            return data;
        }

        public float GetFloat(String column)
        {
            float data = (reader.IsDBNull(reader.GetOrdinal(column))) ? 0 : float.Parse(reader[column].ToString());
            return data;
        }

        public double GetDouble(String column)
        {
            double data = (reader.IsDBNull(reader.GetOrdinal(column))) ? 0 : double.Parse(reader[column].ToString());
            return data;
        }

        public decimal GetDecimal(String column)
        {
            decimal data = (reader.IsDBNull(reader.GetOrdinal(column))) ? 0 : decimal.Parse(reader[column].ToString());
            return data;
        }

        public Single GetSingle(String column)
        {
            Single data = (reader.IsDBNull(reader.GetOrdinal(column))) ? 0 : Single.Parse(reader[column].ToString());
            return data;
        }

        public bool GetBoolean(String column)
        {
            bool data = (reader.IsDBNull(reader.GetOrdinal(column))) ? false : (bool) reader[column];
            return data;
        }

        public String GetString(String column)
        {
            String data = (reader.IsDBNull(reader.GetOrdinal(column))) ? null : reader[column].ToString();
            return data;
        }

        public byte[] GetBytes(String column)
        {
            String data = (reader.IsDBNull(reader.GetOrdinal(column))) ? null : reader[column].ToString();
            return Encoding.UTF8.GetBytes(data);
        }

        public Guid GetGuid(String column)
        {
            String data = (reader.IsDBNull(reader.GetOrdinal(column))) ? null : reader[column].ToString();
            Guid guid = Guid.Empty;
            if (data != null)
            {
                guid = new Guid(data);
            }
            return guid;
        }

        public DateTime GetDateTime(String column)
        {
            DateTime data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultDate : (DateTime) reader[column];
            return data;
        }

        public bool Read()
        {
            return reader.Read();
        }

        private IDataReader reader;
    }

数据库字段NULL值转换辅助类SmartDataReader测试代码

    public class TestSmartDataReader
    {
        public static string Execute()
        {
            string result = string.Empty;
            result += "使用SmartDataReader辅助类:" + "\r\n";

            try
            {
                TestInfo person = SelectOne();
                result += ReflectionUtil.GetProperties(person) + "\r\n \r\n";
            }
            catch (Exception ex)
            {
                result += string.Format("发生错误:{0}!\r\n \r\n", ex.Message);
            }
            return result;
        }
        
        /// <summary>
        /// 将DataReader的属性值转化为实体类的属性值,返回实体类
        /// </summary>
        /// <param name="dataReader">有效的DataReader对象</param>
        /// <returns>实体类对象</returns>
        private static TestInfo DataReaderToEntity(IDataReader dataReader)
        {
            TestInfo testInfo = new TestInfo();
            SmartDataReader reader = new SmartDataReader(dataReader);
            
            testInfo.ID = reader.GetInt32("ID");
            testInfo.Name = reader.GetString("Name");
            testInfo.Age = reader.GetInt32("Age");
            testInfo.Man = reader.GetBoolean("Man");
            testInfo.Birthday = reader.GetDateTime("Birthday");
            
            return testInfo;
        }
        
        public static TestInfo SelectOne()
        {
            TestInfo testInfo = null;
            string sqlCommand = " Select top 1 * from Test";

            string connectionString = "Server=localhost;Database=Test;uid=sa;pwd=123456";
            using(SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                SqlCommand com = new SqlCommand(sqlCommand, connection);
                using (IDataReader reader = com.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        testInfo = DataReaderToEntity(reader);
                    }
                }
            }
            return testInfo;
        }
    }

字符串操作辅助类

    /// <summary>
    /// 字符串操作辅助类
    /// </summary>
    public class StringUtil
    {
        一些基本的符号常量

        private StringUtil()
        {
        }

        /// <summary>
        /// 移除空格并首字母小写的Camel样式
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static string ToCamel(string name)
        {
            string clone = name.TrimStart('_');
            clone = RemoveSpaces(ToProperCase(clone));
            return String.Format("{0}{1}", Char.ToLower(clone[0]), clone.Substring(1, clone.Length - 1));
        }

        /// <summary>
        /// 移除空格并首字母大写的Pascal样式
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static string ToCapit(string name)
        {
            string clone = name.TrimStart('_');
            return RemoveSpaces(ToProperCase(clone));
        }


        /// <summary>
        /// 移除最后的字符
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static string RemoveFinalChar(string s)
        {
            if (s.Length > 1)
            {
                s = s.Substring(0, s.Length - 1);
            }
            return s;
        }

        /// <summary>
        /// 移除最后的逗号
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static string RemoveFinalComma(string s)
        {
            if (s.Trim().Length > 0)
            {
                int c = s.LastIndexOf(",");
                if (c > 0)
                {
                    s = s.Substring(0, s.Length - (s.Length - c));
                }
            }
            return s;
        }

        /// <summary>
        /// 移除字符中的空格
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static string RemoveSpaces(string s)
        {
            s = s.Trim();
            s = s.Replace(" ", "");
            return s;
        }

        /// <summary>
        /// 字符串首字母大写
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static string ToProperCase(string s)
        {
            string revised = "";
            if (s.Length > 0)
            {
                if (s.IndexOf(" ") > 0)
                {
                    revised = Strings.StrConv(s, VbStrConv.ProperCase, 1033);
                }
                else
                {
                    string firstLetter = s.Substring(0, 1).ToUpper(new CultureInfo("en-US"));
                    revised = firstLetter + s.Substring(1, s.Length - 1);
                }
            }
            return revised;
        }

        /// <summary>
        /// 判断字符是否NULL或者为空
        /// </summary>
        public static bool IsNullOrEmpty(string value)
        {
            if (value == null || value == string.Empty)
            {
                return true;
            }

            return false;
        }
    }

字符串操作辅助类测试代码

    public class TestStringUtil
    {
        public static string Execute()
        {
            string value = "test String,";
            
            string result = string.Empty;
            result += "使用StringUtil字符串操作辅助类:" + "\r\n";
            result += "原字符串为:" + value + "\r\n";
            result += "StringUtil.IsNullOrEmpty:" + StringUtil.IsNullOrEmpty(value) + "\r\n";
            result += "StringUtil.ToCamel:" + StringUtil.ToCamel(value) + "\r\n";
            result += "StringUtil.ToCapit:" + StringUtil.ToCapit(value) + "\r\n";
            result += "StringUtil.RemoveSpaces:" + StringUtil.RemoveSpaces(value) + "\r\n";
            result += "StringUtil.RemoveFinalChar:" + StringUtil.RemoveFinalChar(value) + "\r\n";
            result += "StringUtil.ToProperCase:" + StringUtil.ToProperCase(value) + "\r\n";
            
            result += "\r\n\r\n";
            return result;
        }

Web界面层操作的辅助类

    /// <summary>
    /// Web界面层操作的辅助类
    /// </summary>
    public sealed class UIHelper
    {
        private static ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

        private UIHelper()
        {
        }

        /// <summary>
        /// 提示信息,如果异常为HWException类型,则记录到日志
        /// </summary>
        /// <param name="page">当前的页面</param>
        /// <param name="ex">异常对象</param>
        /// <param name="Close">是否关闭</param>
        public static void ShowError(Page page, Exception ex, bool Close)
        {
            logger.Error("Exception:" + page.ID, ex);

            string errorMsg = ex.Message;
            errorMsg = errorMsg.Replace("\n", " ");
            if (Close)
            {
                AlertAndClose(page, errorMsg);
            }
            else
            {
                Alerts(page, errorMsg);
            }
        }

        /// <summary>
        /// 提示信息
        /// </summary>
        /// <param name="control">当前的页面</param>
        /// <param name="message">提示信息</param>
        public static void Alerts(Control control, string message)
        {
            string script = string.Format("<script>javascript:alert(\"{0}\");</script>", message).Replace("\r\n", "");
            control.Page.RegisterStartupScript("", script);
        }

        /// <summary>
        /// 提示信息并关闭窗口
        /// </summary>
        /// <param name="control">当前的页面</param>
        /// <param name="message">提示信息</param>
        public static void AlertAndClose(Control control, string message)
        {
            string script =
                string.Format("<script>javascript:alert(\"{0}\");window.close();</script>", message).Replace("\r\n", "");
            control.Page.RegisterStartupScript("", script);
        }

        /// <summary>
        /// 将错误信息记录到事件日志中
        /// </summary>
        /// <param name="errorMessage">文本信息</param>
        public static void LogError(string errorMessage)
        {
            logger.Error(errorMessage);
        }

        /// <summary>
        /// 将错误信息记录到事件日志中
        /// </summary>
        /// <param name="ex">错误对象</param>
        public static void LogError(Exception ex)
        {
            try
            {
                logger.Error(ex.Message + "\n" + ex.Source + "\n" + ex.StackTrace);
            }
            catch
            {
            }
        }

        /// <summary>
        /// 弹出提示信息
        /// </summary>
        /// <param name="key">key</param>
        /// <param name="message">提示信息</param>
        /// <param name="page">当前请求的page</param>
        public static void Alert(string key, string message, Page page)
        {
            string msg = string.Format("<script language=\"javascript\">alert(\"{0}\");</script>", message);

            page.RegisterStartupScript(key, msg);
        }

        /// <summary>
        /// 弹出提示信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="page"></param>
        public static void Alert(string message, Page page)
        {
            Alert("message", message, page);
        }

        /// <summary>
        /// 定位到指定的页面
        /// </summary>
        /// <param name="GoPage">目标页面</param>
        public static void GoTo(string GoPage)
        {
            HttpContext.Current.Response.Redirect(GoPage);
        }

        /// <summary>
        /// 定位到指定的页面
        /// </summary>
        /// <param name="control">当前请求的page</param>
        /// <param name="page">目标页面</param>
        public static void Location(Control control, string page)
        {
            string js = "<script language='JavaScript'>";
            js += "top.location='" + page + "'";
            js += "</script>";
            control.Page.RegisterStartupScript("", js);
        }

        /// <summary>
        /// 提示信息并定位到指定的页面
        /// </summary>
        /// <param name="control">当前请求的page</param>
        /// <param name="page">目标页面</param>
        /// <param name="message">提示信息</param>
        public static void AlertAndLocation(Control control, string page, string message)
        {
            string js = "<script language='JavaScript'>";
            js += "alert('" + message + "');";
            js += "top.location='" + page + "'";
            js += "</script>";
            control.Page.RegisterStartupScript("", js);
        }

        /// <summary>
        /// 关闭页面,并返回指定的值
        /// </summary>
        /// <param name="control"></param>
        /// <param name="returnValue"></param>
        public static void CloseWin(Control control, string returnValue)
        {
            string js = "<script language='JavaScript'>";
            js += "window.parent.returnValue='" + returnValue + "';";
            js += "window.close();";
            js += "</script>";
            control.Page.RegisterStartupScript("", js);
        }

        /// <summary>
        /// 获取Html的锚点
        /// </summary>
        /// <param name="innerText"></param>
        /// <param name="href"></param>
        /// <returns></returns>
        public static HtmlAnchor GetHtmlAnchor(string innerText, string href)
        {
            HtmlAnchor htmlAnchor = new HtmlAnchor();
            htmlAnchor.InnerText = innerText;
            htmlAnchor.HRef = href;

            return htmlAnchor;
        }

        /// <summary>
        /// 判断输入的字符是否为数字
        /// </summary>
        /// <param name="strValue"></param>
        /// <returns></returns>
        public static bool IsNumerical(string strValue)
        {
            return Regex.IsMatch(strValue, @"^[0-9]*$");
        }

        /// <summary>
        /// 判断字符串是否是NULL或者string.Empty
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static bool IsNullorEmpty(string text)
        {
            return text == null || text.Trim() == string.Empty;
        }

        /// <summary>
        /// 获取DataGrid控件中选择的项目的ID字符串(要求DataGrid设置datakeyfield="ID")
        /// </summary>
        /// <returns>如果没有选择, 那么返回为空字符串, 否则返回逗号分隔的ID字符串(如1,2,3)</returns>
        public static string GetDatagridItems(DataGrid dg)
        {
            string idstring = string.Empty;
            foreach (DataGridItem item in dg.Items)
            {
                string key = dg.DataKeys[item.ItemIndex].ToString();
                bool isSelected = ((CheckBox) item.FindControl("cbxDelete")).Checked;
                if (isSelected)
                {
                    idstring += "'" + key + "'" + ","; //前后追加单引号,可以其他非数值的ID
                }
            }
            idstring = idstring.Trim(',');

            return idstring;
        }


        /// <summary>
        /// 设置下列列表控件的SelectedValue
        /// </summary>
        /// <param name="control">DropDownList控件</param>
        /// <param name="strValue">SelectedValue的值</param>
        public static void SetDropDownListItem(DropDownList control, string strValue)
        {
            if (!IsNullorEmpty(strValue))
            {
                control.ClearSelection();
                ListItem item = control.Items.FindByValue(strValue);
                if (item != null)
                {
                    control.SelectedValue = item.Value;
                }
            }
        }
    }

Web界面层操作的辅助类测试代码

        private void btnShowError_Click(object sender, EventArgs e)
        {
            try
            {
                throw new Exception("测试错误");
            }
            catch (Exception ex)
            {
                UIHelper.ShowError(this, ex, false);
                return;
            }
        }

        private void btnAlert_Click(object sender, EventArgs e)
        {
            UIHelper.Alert("这是一个提示信息", this);
        }

本文转自博客园伍华聪的博客,原文链接:.NET开发不可不知、不可不用的辅助类(二),如需转载请自行联系原博主。

时间: 2024-10-27 21:03:41

.NET开发不可不知、不可不用的辅助类(二)的相关文章

.NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)

.NET导出报表一般是采用导出Excel报表的方式输出内容.而这又分为两种方式:使用Excel模板方式和使用网页输出Excel格式两种.首先介绍简单的一种,网页输出Excel内容,这种不需要引用Excel的程序集.     /// <summary>    /// 报表导出辅助类    /// </summary>    public class ExportToExcel    {        字段信息                public ExportToExcel()

.NET开发不可不知、不可不用的辅助类(一)

1. 用于获取或设置Web.config/*.exe.config中节点数据的辅助类     /// <summary>    /// 用于获取或设置Web.config/*.exe.config中节点数据的辅助类    /// </summary>    public sealed class AppConfig    {        private string filePath;        /// <summary>        /// 从当前目录中按顺序

Ruby on rails开发从头来(windows)(二)

创建项目和第一个Hello world 在前面的"使用InstantRaisl快速搭建Ruby on rails环境"后,这一次说说如何创建自己的项目,并写一个最简单的Hello页面,例子是借用Agile Web Development with Rails中的. 按照下面的步骤: 1.使用菜单,如下图: 开发从头来(windows)(二)-ruby on rails"> 2.点击"Create New Rails App-"按钮,如下图

Visual Studio 原生开发的10个调试技巧(二)

原文:Visual Studio 原生开发的10个调试技巧(二) 我以前关于 Visual Studio 调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你可以看到写原生开发的调试技巧(接着以前的文章来编号).这些技巧可以应用在 VS2005 或者更新版本中(当然有一些可以适用于旧版本).如果你继续,你可以知道每个技巧的详细信息. 数据断点 线程重命名 特定进程中断 大概执行时间 数字格式化 内存数据格式化 系统DLL中断 装载符号表 MFC中内存泄露报告 调试A

微信开发之网页授权获取用户信息(二)_php实例

在公众号的配置过程中,许多开发者会在菜单中加入HTML5页面,有时在页面内需要访问页面的用户信息,此时就需要网页授权获取用户基本信息 提醒大家:本文介绍讲述的内容是基于yii2.0框架 1.设置授权回调域名:开发 ---> 接口权限 找到"网页授权获取用户基本信息",点击后面对应的"修改",在弹框响应位置填写授权回调域名即可,此处的域名不需要加http:// (关于网页授权回调域名的说明详情可参考公众平台开发者文档) 2.获取授权 关于OAuth2.0博主参考

web开发设计人员不可不用的在线web工具和应用

大家可能还记得在过去的文章我们我们曾经介绍我们收集的前端开发人员必备的工具,脚本和资源,在今天的这篇文章中,我们将继续推荐给大家一组我们精挑细选的web开发设计必备的在线工具应用.相信会在web开发和设计的过程中给你带来方便和快捷! 前端开发相关 jsfiddle jsfiddle是老牌的在线调试和分享代码的网站,它可以帮助你在线调试javascript/css/html代码, 并且方便的发布到社区,论坛或者社交媒体上与朋友们分享或者提问.整合了很多的不同的类库供大家选择. 类似的工具还有jsb

大家作开发的时候用不用myeclipse 中的UML?

问题描述 今天早上一直在看UML,但是感觉这个插件似乎和myeclipse结合的不是很好.生成某些方法不如在代码里直接操作方便,代码反向生成UML效果似乎也不尽人意,好多依赖关系都显示把出来...似乎仅仅做个架构图看看还成,靠它写程序似乎太累了.... 解决方案 解决方案二:用过,但没像你这么试过.开发的时候肯定是不会用这个的了.解决方案三:几乎就是没用过.解决方案四:UML是鸡肋啊基本都是用来写文档的

iOS开发网络篇—网络编程基础(二)

下面叙述的是关于几个必须要知道的iOS网络编程入门级别的要点: 1.客户端如何找到连接的服务器 客户端通过URL找到想要连接的服务器 2.什么是URL URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL URL的基本格式 = 协议://主机地址/路径 http://www.520it.com/img/logo.png 协议:不同的协议,代表着不同的资源查

【Eclipse插件开发】基于WTP开发自定义的JSP编辑器(十二)

定制自动编辑策略(Auto Edit Strategy) JFace Text Framework框架的一个重要的功能特征就是自动编辑策略,它允许用户对输入的内容(准 确的说应该是即将来临的Document修改^_^)做即时编辑,然后又会透明的将用户的修改付诸于实现(即 应用到当前文档).在本节,我们将在前两节有关TLD Content Model的基础上开发一个自动编辑策略. [JFace Text Framework 自动编辑策略原理介绍] [JDT Java源码编辑器自动编辑策略演示] 我