zoukankan      html  css  js  c++  java
  • 一个错误记录类&一个序列化配置文件读取类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace PDAJob.PDAService.Service
    {
        using EFModel;
        using System.Xml.Serialization;
        using System.Text;
        using System.IO;
        using System.Diagnostics;
        public class ErrLogMgr
        {
            public static void Log(string msg, params CallParam[] args)
            {
                StackFrame sf = new StackFrame(1);
                var methodInfo = sf.GetMethod();
                var fname = methodInfo.DeclaringType.FullName +"->" + methodInfo.Name;
    
                Action act = () =>
                {
                    using (var ctx = DBCtx.NewCtx())
                    {
                        try
                        {
       
    
                            string argsStr = "";
                            if (args.Length > 0)
                            {
                                argsStr = args.Aggregate("", (total, ent) => total +=ent +",").TrimEnd(",".ToCharArray());
                            }
    
                            var logEntry = new KB_Lable_Log();
                            logEntry.LogType = 44;
                            logEntry.AddTime = DateTime.Now;
    
                            logEntry.Msg = string.Format("Func:{2},Err:{0},Params:{1}", msg, argsStr,fname);
                            ctx.KB_Lable_Log.AddObject(logEntry);
                            ctx.SaveChanges();
                        }
                        catch { }
                    }
                };
                act.BeginInvoke(null, null);
    
    
            }
    
        }
        /// <summary>
        /// 参数
        /// </summary>
        public class CallParam
        {
            public CallParam() { }
            public CallParam(string name, object value)
            {
                this.Name = name;
                this.Value = value;
            }
            public string Name { get; set; }
            public object Value { get; set; }
    
            public override string ToString()
            {
                return   string.Format("n$:{0}->v$:{1}", this.Name, ConverToStr(this.Value));
            }
    
    
            private static string ConverToStr(object obj)
            {
                if (obj == null) return string.Empty;
    
                if (obj.GetType().IsPrimitive || obj is string)
                {
                    return obj.ToString();
                }
                if (IsNullable(obj.GetType()))
                {
                    return obj.ToString();
                }
                //执行xml序列化
                XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
                StringBuilder sb = new StringBuilder();
                using (var sw = new StringWriter(sb))
                {
                    xmlSerializer.Serialize(sw, obj);
    
                }
    
                return sb.ToString();
            }
            private static bool IsNullable(Type t)
            {
                return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>);
            }
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Xml.Serialization;
    using System.Text;
    using System.IO;
    using System.Web.Caching;
    
    namespace F.Studio.Common.Cfg
    {
        /// <summary>
        /// 管理对象序列化配置文件
        /// 对配置文件进行文件监视缓存
        /// 需要再根目录下存在/data/xml目录
        /// 使用类的FullName来保持
        /// 泛型类,使用最内部的类名表示
        /// 所以List~T
        /// 跟Stack~T 会对应同样的文件名
        /// 需要进行区分
        /// 如果你要要很多Name-value这样的数据要用List~T类型
        /// 建议将T加个TypeId,这样放到同个文件中,读出来后按Type,进行过滤
        /// 2013-07-08加入了目录检测
        /// </summary>
        public class XmlDataCfgMgr<T> where T:class
        {
    
            private static readonly string _Dir=@"data/xml/";
            private static readonly string _CacheKey = "XmlDataCfgCacheKey";
            public  string CacheKey
            {
                get
                {
                    return _CacheKey + FileName;
                }
            }
    
            public string FileName
            {
                get
                {
      
    
                        var t = typeof(T);
                        while (t.IsGenericType)
                        {
                            var a = t.GetGenericArguments();
                            if (a.Length > 0) t = a[0];
    
                        }
    
                        //这里,_Dir清明不要有/或\
                        return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, _Dir + t.FullName + ".xml");
              
    
                }
          
            }
            private XmlDataCfgMgr()
            {
    
            }
            private static Lazy<XmlDataCfgMgr<T>> _Lazy = new Lazy<XmlDataCfgMgr<T>>(() => 
            {
                return new XmlDataCfgMgr<T>();
            }, true);
            public static  T GetV(T def)
            {
    
                return _Lazy.Value.Get(def);
               
            }
            public static string SaveV(T obj)
            {
                return _Lazy.Value.Save(obj);
            }
            public T Get(T def)
            {
                var item = HttpRuntime.Cache[CacheKey] as T;
                if (item == null)
                {
                    lock (this)
                    {
                        item = HttpRuntime.Cache[CacheKey] as T;
                        if (item == null)
                        {
                            
                            item = Deserializer();
                            var monitorFilename = FileName;
                            try
                            {
                                var fileCacheDep = new CacheDependency(monitorFilename);
                                System.Web.HttpRuntime.Cache.Add(CacheKey, item, fileCacheDep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.High, null);
                            }
                            catch (Exception) { };
                        }
                    }
                    //Console.WriteLine("读取文件!");
    
                }
    
                if (item == null) return def;
    
                return item;
            }
    
            private T Deserializer()
            {
                T obj = null;
                try
                {
                    var xml = LoadContent().Trim();
                    if (string.IsNullOrEmpty(xml)) return null;
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    
                    using (var sr = new StringReader(xml))
                    {
                        obj = serializer.Deserialize(new StringReader(xml)) as T;
    
                    }
                }
                catch { }
    
                return obj;
            }
            private string LoadContent()
            {
                if (!File.Exists(FileName))
                {
                    return string.Empty;
                }
                try
                {
                    var content = File.ReadAllText(FileName);
                    return content;
                }
                catch (Exception)
                {
                    return string.Empty;
                }
            }
            public string Save(T obj)
            {
                
                
                //执行xml序列化
                var type = typeof(T);
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                StringBuilder sb = new StringBuilder();
                using (var sw = new StringWriter(sb))
                {
                    xmlSerializer.Serialize(sw, obj);
    
                }
                #region 确保目录存在
                DirectoryInfo dirInfo = new DirectoryInfo(Path.GetDirectoryName(FileName));
                var dir = dirInfo;
                Stack<DirectoryInfo> needCreatedDirs = new Stack<DirectoryInfo>();
                while (!dir.Exists)
                {
                    needCreatedDirs.Push(dir);
                    dir = dir.Parent;
                }
                while (needCreatedDirs.Count > 0)
                {
                    needCreatedDirs.Pop().Create();
                }
                #endregion
    
                File.WriteAllText(FileName, sb.ToString());
                return sb.ToString();
            }
        }
    }
    View Code

    //=========可空类型的泛型参数==============        

    protected object getV<T>(Nullable<T> v) where T : struct
            {
                if (v.HasValue) return v;
                return DBNull.Value;
            }

  • 相关阅读:
    (二)Maven的使用--安装配置
    (一)Maven介绍
    (二)Monkey自动化脚本
    App测试--专项测试
    Java基础--(三)运算符
    Vue.js 介绍入门
    NodeJS 入门第三天(Express框架)
    NodeJS 入门第二天(EJS模板)
    《前端架构设计》读后感
    NodeJS 入门第一天
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3081847.html
Copyright © 2011-2022 走看看