zoukankan      html  css  js  c++  java
  • 使用泛型对读写配置文件的方法进行封装

    一般一个站点会有多个配置文件,如果要针对每个配置文件进行读写,这是要疯的节奏

    之前学泛型,一直没用到过,在这里练习一下,体会泛型实际对我们减少冗余代码的作用 

    /// <summary>
        /// 站点配置文件的路径
        /// </summary>
        public class ConfigPath
        {
            /// <summary>
            /// 数据库配置文件
            /// </summary>
            public static readonly string DB = "/App_Data/DB.config";
    
            /// <summary>
            /// 站点配置文件
            /// </summary>
            public static readonly string WebSite = "/App_Data/WebSite.config";
        }
    
        /// <summary>
        /// 操作配置文件帮助类
        /// </summary>
        public class ConfigHelper
        {
    
            private static object lockHelper = new object();
    
            /// <summary>
            /// 加载配置文件
            /// </summary>
            /// <param name="configPath">配置文件相对路径</param>
            /// <param name="IsCache">是否使用缓存</param>
            /// <param name="cacheKey">如果使用了缓存,则缓存键为</param>
            /// <returns></returns>
            public static T LoadConfig<T>(string configPath, bool isCache, string cacheKey)
            {
                if (isCache)
                {
                    T model = (T)CacheHelper.Get(cacheKey);
                    if (model == null)
                    {
                        model = (T)IOHelper.DeserializeFromXML(typeof(T), IOHelper.GetMapPath(configPath));
                        if (model != null)
                            CacheHelper.Insert(cacheKey, model,IOHelper.GetMapPath(configPath));
                    }
                    return model;
                }
                else
                {
                    return (T)IOHelper.DeserializeFromXML(typeof(T), IOHelper.GetMapPath(configPath));
                }
    
            }
    
            /// <summary>
            /// 写入配置文件
            /// </summary>
            /// <param name="configPath">配置文件相对路径</param>
            /// <param name="obj">新的内容实体</param>
            /// <returns></returns>
            public static bool SaveConfig(string configPath,object obj)
            {
                var permissionSet = new PermissionSet(PermissionState.None);
                var writePermission = new FileIOPermission(FileIOPermissionAccess.Write, IOHelper.GetMapPath(configPath));
                permissionSet.AddPermission(writePermission);
    
                if (permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet))
                {
                    lock (lockHelper)
                    {
                        IOHelper.SerializeToXml(obj,IOHelper.GetMapPath(configPath));
                    }
                    return true;
                }
                else
                {
                    return false;//没有写入权限
                }
            }
    
        }

    IOHelper类中序列化的两个方法:

    #region  序列化
    
            /// <summary>
            /// XML序列化
            /// </summary>
            /// <param name="obj">序列对象</param>
            /// <param name="filePath">XML文件路径</param>
            /// <returns>是否成功</returns>
            public static bool SerializeToXml(object obj, string filePath)
            {
                bool result = false;
    
                FileStream fs = null;
                try
                {
                    fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                    XmlSerializer serializer = new XmlSerializer(obj.GetType());
                    serializer.Serialize(fs, obj);
                    result = true;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (fs != null)
                        fs.Close();
                }
                return result;
    
            }
    
            /// <summary>
            /// XML反序列化
            /// </summary>
            /// <param name="type">目标类型(Type类型)</param>
            /// <param name="filePath">XML文件路径</param>
            /// <returns>序列对象</returns>
            public static object DeserializeFromXML(Type type, string filePath)
            {
                FileStream fs = null;
                try
                {
                    fs = new FileStream(filePath, 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();
                }
            }
    
            #endregion

    配置文件的xml:

    <?xml version="1.0" encoding="utf-8"?>
    <WebSite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <SiteName>站点名称</SiteName>
      <SiteUrl>站点URL</SiteUrl>
      <ICP>备案信息</ICP>
      
    </WebSite>

    实体类:

    /// <summary>
        /// 站点配置信息
        /// </summary>
        [Serializable]
        public class WebSite
        {
            /// <summary>
            /// 站点名称
            /// </summary>
            public string SiteName{get;set;}
    
            /// <summary>
            /// 站点URL
            /// </summary>
            public string SiteUrl { get; set; }
    
            /// <summary>
            /// 站点配置信息
            /// </summary>
            public string ICP { get; set; }
        }

    调用:

    /// <summary>
            /// 站点配置文件
            /// </summary>
            public Model.WebSite SiteConfig { get { return ConfigHelper.LoadConfig<Model.WebSite>(ConfigPath.WebSite, true, CacheKey.CACHE_SITECONFIG); } }
  • 相关阅读:
    HDU 1730 类NIM模型
    HDU 4315 阶梯博弈变形
    HDU 3389 阶梯博弈变形
    HDU 1524 树上无环博弈 暴力SG
    HDU 3094 树上删边 NIM变形
    vim的安装与配置
    Apache Mysql 搭配详解
    [置顶] 博客转移
    “玲珑杯”线上赛 Round #15 河南专场 C 咸鱼魔法记
    “玲珑杯”线上赛 Round #15 河南专场 F 咸鱼文章
  • 原文地址:https://www.cnblogs.com/New-world/p/3864384.html
Copyright © 2011-2022 走看看