博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
net core体系-web应用程序-4asp.net core2.0 项目实战(1)-10项目各种全局帮助类
阅读量:4945 次
发布时间:2019-06-11

本文共 13306 字,大约阅读时间需要 44 分钟。

本文目录

1.  前沿

2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装
3.XmlHelper快速操作xml文档
4.SerializationHelper文件序列化操作
5.JsonHelper基于Newtonsoft.Json封装
6.ByteConvertHelper byte转换操作类
7. 总结

1.  前沿

  Net Core2.0以前缓存操作、XML操作文档、处理JSON、序列化等都整理过相关帮助类,方便项目全局开发调用,但这些Helper在Net Core下面需要做调整才能使用,下面是我开发过程中整理的几个帮助类,可单独使用,仅供参考。

2.  CacheHelper基于Microsoft.Extensions.Caching.Memory封装

  在net core2.0下System.Web.Caching不在提供支持,取而代之的是Microsoft.Extensions.Caching.Memory,现在就基于新的类库做扩展封装。注意:netcore2.0文件依赖缓存好像没有扩展,修改文件信息后缓存自动更新功能暂未整合。

using System;//using System.Web.Caching;//netcore2.0不再提供支持using Microsoft.Extensions.Caching.Memory;namespace NC.Common{    ///     /// 为当前 HTTP 请求获取 Cache 对象。    ///     public class CacheHelper    {        static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());        ///         /// 创建缓存项的文件        ///         /// 缓存Key        /// object对象        public static void Set(string key, object value)        {            if (key != null)            {                cache.Set(key, value);            }        }        ///         /// 创建缓存项过期        ///         /// 缓存Key        /// object对象        /// 过期时间(秒)        public static void Set(string key, object value, int expires)        {            if (key != null)            {                cache.Set(key, value, new MemoryCacheEntryOptions()                    //设置缓存时间,如果被访问重置缓存时间。设置相对过期时间x秒                    .SetSlidingExpiration(TimeSpan.FromSeconds(expires)));            }        }        //dotnetcore2.0 文件依赖缓存好像没有,暂未找到。        /         / 创建缓存项的文件依赖        /         / 缓存Key        / object对象        / 文件绝对路径        //public static void Set(string key, object obj, string fileName)        //{        //    //创建缓存依赖项        //    CacheDependency dep = new CacheDependency(fileName);        //    //创建缓存        //    HttpContext.Current.Cache.Insert(key, obj, dep);        //}        ///         /// 获取缓存对象        ///         /// 缓存Key        /// 
object对象
public static object Get(string key) { object val = null; if (key != null && cache.TryGetValue(key, out val)) { return val; } else { return default(object); } } /// /// 获取缓存对象 /// ///
T对象
/// 缓存Key ///
public static T Get
(string key) { object obj = Get(key); return obj == null ? default(T) : (T)obj; } ///
/// 移除缓存项的文件 /// ///
缓存Key public static void Remove(string key) { cache.Remove(key); } }}

3.  XmlHelper快速操作xml文档

  这里封装常见的对xml的操作和读取方法,追加节点,删除节点操作处理方法。配合序列化Hepler类处理。Core项目中实际使用过程中现仅用到SerializationHelper,里面序列化了xml并操作。由于xmlhelper做好了分享出来。

using System;using System.Collections.Generic;using System.Text;using System.Xml;namespace NC.Common{    public class XmlHelper    {        #region --增、删、改操作--        ///         /// 追加节点        ///         /// XML文档绝对路径        /// 范例: @"Skill/First/SkillItem"        /// XmlNode节点        /// 
public static bool AppendChild(string filePath, string xPath, XmlNode xmlNode) { try { XmlDocument doc = new XmlDocument(); doc.Load(filePath); XmlNode xn = doc.SelectSingleNode(xPath); XmlNode n = doc.ImportNode(xmlNode, true); xn.AppendChild(n); doc.Save(filePath); return true; } catch { return false; } } /// /// 从XML文档中读取节点追加到另一个XML文档中 /// /// 需要读取的XML文档绝对路径 /// 范例: @"Skill/First/SkillItem" /// 被追加节点的XML文档绝对路径 /// 范例: @"Skill/First/SkillItem" ///
public static bool AppendChild(string filePath, string xPath, string toFilePath, string toXPath) { try { XmlDocument doc = new XmlDocument(); doc.Load(toFilePath); XmlNode xn = doc.SelectSingleNode(toXPath); XmlNodeList xnList = ReadNodes(filePath, xPath); if (xnList != null) { foreach (XmlElement xe in xnList) { XmlNode n = doc.ImportNode(xe, true); xn.AppendChild(n); } doc.Save(toFilePath); } return true; } catch { return false; } } /// /// 修改节点的InnerText的值 /// /// XML文件绝对路径 /// 范例: @"Skill/First/SkillItem" /// 节点的值 ///
public static bool UpdateNodeInnerText(string filePath, string xPath, string value) { try { XmlDocument doc = new XmlDocument(); doc.Load(filePath); XmlNode xn = doc.SelectSingleNode(xPath); XmlElement xe = (XmlElement)xn; xe.InnerText = value; doc.Save(filePath); } catch { return false; } return true; } /// /// 读取XML文档 /// /// XML文件绝对路径 ///
public static XmlDocument LoadXmlDoc(string filePath) { try { XmlDocument doc = new XmlDocument(); doc.Load(filePath); return doc; } catch { return null; } } #endregion 增、删、改操作 #region --读取XML的所有子节点-- /// /// 读取XML的所有子节点 /// /// XML文件绝对路径 /// 范例: @"Skill/First/SkillItem" ///
public static XmlNodeList ReadNodes(string filePath, string xPath) { try { XmlDocument doc = new XmlDocument(); doc.Load(filePath); XmlNode xn = doc.SelectSingleNode(xPath); XmlNodeList xnList = xn.ChildNodes; //得到该节点的子节点 return xnList; } catch { return null; } } #endregion 扩展方法 }}

  以上用的是try catch这种处理,如果使用using可以参考一下链接:https://www.cnblogs.com/Chary/p/No0000DE.html

4.  SerializationHelper文件序列化操作

  对xml文件进行序列化并操作,可以参考。

using System;using System.Collections.Generic;using System.IO;using System.Text;using System.Xml.Serialization;namespace NC.Common{    public class SerializationHelper    {        public SerializationHelper() { }        ///         /// 反序列化        ///         /// 对象类型        /// 文件路径        /// 
public static object Load(Type type, string filename) { FileStream fs = null; try { // open the stream... fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); XmlSerializer serializer = new XmlSerializer(type); return serializer.Deserialize(fs); } catch (Exception ex) { throw ex; } finally { if (fs != null) fs.Close(); } } /// /// 序列化 /// /// 对象 /// 文件路径 public static void Save(object obj, string filename) { FileStream fs = null; // serialize it... try { fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); XmlSerializer serializer = new XmlSerializer(obj.GetType()); serializer.Serialize(fs, obj); } catch (Exception ex) { throw ex; } finally { if (fs != null) fs.Close(); } } }}

  调用案例:

#region--站点配置文件--        ///         ///  读取配置文件        ///         public NC.Model.siteconfig loadConfig()        {            NC.Model.siteconfig model = CacheHelper.Get
(JHKeys.CACHE_SYS_CONFIG); if (model == null) { //netcore2.0文件依赖缓存没有,暂时只能修改文件后手动清空一次缓存 //Utils.GetXmlMapPath(JHKeys.FILE_SYS_XML_CONFING);//CacheHelper是NET Core下Microsoft.Extensions.Caching.Memory缓存帮助类 CacheHelper.Set(JHKeys.CACHE_SYS_CONFIG, (NC.Model.siteconfig)SerializationHelper.Load(typeof(NC.Model.siteconfig), Utils.GetXmlMapPath(JHKeys.FILE_SYS_XML_CONFING))); model = CacheHelper.Get
(JHKeys.CACHE_SYS_CONFIG); } return model; } ///
/// 保存配置文件 /// public NC.Model.siteconfig saveConifg(NC.Model.siteconfig model) { return saveConifg(model, Utils.GetXmlMapPath(JHKeys.FILE_SYS_XML_CONFING)); } private static object lockHelper = new object(); ///
/// 写入站点配置文件 /// public NC.Model.siteconfig saveConifg(NC.Model.siteconfig model, string configFilePath) { // 清缓存CacheHelper.Remove(JHKeys.CACHE_SYS_CONFIG); lock (lockHelper) { SerializationHelper.Save(model, configFilePath); } return model; }#endregion

5.  JsonHelper基于Newtonsoft.Json封装

using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Data;using System.Text;namespace NC.Common{    ///     /// JSON帮助类    ///     public class JsonHelper    {        ///          /// 对象转JSON         ///          /// 对象         /// 
JSON格式的字符串
public static string ObjectToJSON(object obj) { try { byte[] b = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(obj)); return Encoding.UTF8.GetString(b); } catch (Exception ex) { throw new Exception("JSONHelper.ObjectToJSON(): " + ex.Message); } } /// /// 数据表转键值对集合 /// 把DataTable转成 List集合, 存每一行 /// 集合中放的是键值对字典,存每一列 /// /// 数据表 ///
哈希表数组
public static List
> DataTableToList(DataTable dt) { List
> list = new List
>(); foreach (DataRow dr in dt.Rows) { Dictionary
dic = new Dictionary
(); foreach (DataColumn dc in dt.Columns) { dic.Add(dc.ColumnName, dr[dc.ColumnName]); } list.Add(dic); } return list; } ///
/// 数据集转键值对数组字典 /// ///
数据集 ///
键值对数组字典
public static Dictionary
>> DataSetToDic(DataSet ds) { Dictionary
>> result = new Dictionary
>>(); foreach (DataTable dt in ds.Tables) result.Add(dt.TableName, DataTableToList(dt)); return result; } ///
/// 数据表转JSON /// ///
数据表 ///
JSON字符串
public static string DataTableToJSON(DataTable dt) { return ObjectToJSON(DataTableToList(dt)); } ///
/// JSON文本转对象,泛型方法 /// ///
类型
///
JSON文本 ///
指定类型的对象
public static T JSONToObject
(string jsonText) { //JavaScriptSerializer jss = new JavaScriptSerializer(); try { return JsonConvert.DeserializeObject
(jsonText); //return jss.Deserialize
(jsonText); } catch (Exception ex) { throw new Exception("JSONHelper.JSONToObject(): " + ex.Message); } } ///
/// 将JSON文本转换为数据表数据 /// ///
JSON文本 ///
数据表字典
public static Dictionary
>> TablesDataFromJSON(string jsonText) { return JSONToObject
>>>(jsonText); } ///
/// 将JSON文本转换成数据行 /// ///
JSON文本 ///
数据行的字典
public static Dictionary
DataRowFromJSON(string jsonText) { return JSONToObject
>(jsonText); } }}

6.  ByteConvertHelper byte转换操作类

    Byte转换操作类这里主要配合session存储使用,net core 2.0存储session 类型为object,先转成byte存储,读取再通过byte转object。

    例如Session存储值是字符串;设置session:HttpContext.Session.SetString("name","hello world!");  获取session:string str = HttpContext.Session.GetString("name"); 

using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Text;namespace NC.Common{    ///     /// byte转换操作类,主要用于Session存储    ///     public class ByteConvertHelper    {        ///         /// 将对象转换为byte数组        ///         /// 被转换对象        /// 
转换后byte数组
public static byte[] Object2Bytes(object obj) { byte[] serializedResult = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(obj)); return serializedResult; } /// /// 将byte数组转换成对象 /// /// 被转换byte数组 ///
转换完成后的对象
public static object Bytes2Object(byte[] buff) { return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(buff)); } /// /// 将byte数组转换成对象 /// /// 被转换byte数组 ///
转换完成后的对象
public static T Bytes2Object
(byte[] buff) { return JsonConvert.DeserializeObject
(Encoding.UTF8.GetString(buff)); } }}

  调用实例参考《》中的<3.5 Session相关操作>。

7.  总结

  以上帮助类只是为了快速开发,文中有些帮助类是由webform项目升级改造的,适合自己项目的一些封装,仅供参考。需要做成帮助类全局调用的Helper还有很多,欢迎大家多多交流,谢谢!

转载于:https://www.cnblogs.com/hmit/p/10769318.html

你可能感兴趣的文章
旅行家的预算 1999年NOIP全国联赛普及组NOIP全国联赛提高组
查看>>
最长严格上升子序列
查看>>
asp.net将控件或页面数据导出到Excel
查看>>
(50)zabbix API二次开发使用与介绍
查看>>
2016/1/1--jquery(添加和部分css)
查看>>
2016/02/04
查看>>
一些资料
查看>>
smix到底是个啥?Perl的正则表达式匹配模式
查看>>
STM32的USART
查看>>
ubuntu解决软件依赖问题
查看>>
sql常识-union
查看>>
Mysql之字符集
查看>>
第二章 网络爬虫技能概述
查看>>
DFS和BFS
查看>>
Python中sort和sorted函数代码解析
查看>>
R语言Switch语句
查看>>
bash数组
查看>>
python学习目录
查看>>
爬虫苦训第一天,我的第一个爬虫!!!
查看>>
poj2992 阶乘分解
查看>>