工作过程中,一些代码片段记录

Random rd = new Random(Guid.NewGuid().GetHashCode());
xxxlist.OrderBy(x = >rd.Next()).Take(n).ToList();
/// <summary>
/// 记录JsonResult、ContentResult、JavaScriptResult三种ActionResult
/// </summary>
public class ResultFilterAttribute : FilterAttribute, IResultFilter
{
    /// <summary>
    /// 保存post提交的参数
    /// </summary>
    public bool SavePost { get; set; }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="filterContext"></param>
    public void OnResultExecuted(ResultExecutedContext filterContext)
    {
        var jsonResult = filterContext.Result as JsonResult;
        try
        {
            string content = string.Empty;
            JavaScriptSerializer jss = null;
            if (jsonResult != null)
            {
                var data = jsonResult.Data;
                jss = new JavaScriptSerializer();

                content = jss.Serialize(data);
            }
            var contentResult = filterContext.Result as ContentResult;
            if (contentResult != null)
            {
                content = contentResult.Content;
            }

            var javaScriptResult = filterContext.Result as JavaScriptResult;
            if (javaScriptResult != null)
            {
                content = javaScriptResult.Script;
            }
            if (string.IsNullOrWhiteSpace(content))
            {
                return;
            }
            string userName = filterContext.HttpContext.User.Identity.Name;
            string ip = Common.WebUtils.Get_ClientIP();

            string host = filterContext.HttpContext.Request.Url.Host;
            string url = filterContext.HttpContext.Request.Url.ToString();
            string browser = Common.WebUtils.GetClientBrowser();
            string urlReferrer = string.Empty;
            if (filterContext.HttpContext.Request.UrlReferrer != null)
            {
                urlReferrer = filterContext.HttpContext.Request.UrlReferrer.ToString();
            }

            string form = string.Empty;
            if (SavePost)
            {
                if (jss == null)
                    jss = new JavaScriptSerializer();

                var keys = filterContext.HttpContext.Request.Form.AllKeys;
                Dictionary<string, string> dic = new Dictionary<string, string>();
                foreach (var key in keys)
                {
                    dic[key] = filterContext.HttpContext.Request.Form[key];
                }
                form = jss.Serialize(dic);
            }
            HttpLog.Service.LogInfo_Insert(new HttpLog.Service.LogInfo
            {
                Browser = browser,
                CreateTime = DateTime.Now.Ticks,
                Host = host,
                IP = ip,
                Url = url.ToLower(),
                UrlReferrer = urlReferrer.ToLower(),
                UserName = userName,
                Content = content,
                Form = form
            });
        }
        catch (Exception ex)
        {
            LogHelper.Error("记录httplog失败", ex);
        }
    }

    public void OnResultExecuting(ResultExecutingContext filterContext)
    {
        //........
    }
}
string str = "xxxxxxxxxxxxxxxxxxx";
string targetstr = "biaud.com";
bool check = str.ToLower().IndexOf(targetstr, StringComparison.Ordinal) > -1;
对象是否在枚举项中定义
public enum enumStatus {
    All = 0,
    Started = 1,
    End = 2
}
bool enumDefine = Enum.IsDefined(typeof(enumStatus), 1); // or 
bool enumDefine = Enum.IsDefined(typeof(enumStatus), "Started");

public static string Md5EncryptClassic(string plainText) {
    using(MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider()) {
        byte[] _byte = hashmd5.ComputeHash(Encoding.Default.GetBytes(plainText ? ?string.Empty));
        return System.BitConverter.ToString(_byte).Replace("-", "").ToLower();
    }
}
public static string HashEx(long userId) {
    string md = Md5EncryptClassic(userId.ToString());
    return md.Substring(0, 2).ToLower();
}
public static string Serialize(object value) {
    if (value == null) {
        return null;
    }
    XmlSerializer xs = new XmlSerializer(value.GetType());
    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    xs.Serialize(sw, value);
    Regex reg = new Regex(@"[\s]*xmlns:[\w]*?=""[\w\W]*?""");
    string temp = reg.Replace(sb.ToString(), string.Empty);
    Regex reg2 = new Regex(@"<[?]xml[\w\W]+?[?]>");
    temp = reg2.Replace(temp, string.Empty);
    temp = StringHelper.ClearSpecialChar(temp);
    // "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
    return temp;
}

public static T Deserialize < T > (string xml) {
    try {
        if (!string.IsNullOrEmpty(xml)) {
            XmlSerializer xs;
            StringReader sr = new StringReader(xml);
            xs = new XmlSerializer(typeof(T));
            return (T) xs.Deserialize(sr);
        } else {
            return
        default (T);
        }
    } catch //(Exception ex)
    {
        return
    default (T);
    }
}

public class StringHelper {
    /// <summary>
    /// 清除特殊字符
    /// </summary>
    /// <param name="sourceString"></param>
    /// <returns></returns>
    public static string ClearSpecialChar(string sourceString) {
        string pattern = @"[\u0000-\u0008]|[\u000B-\u000C]|[\u000E-\u001F]";
        System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline);

        string temp = reg.Replace(sourceString, "");
        //&#x{0:X}; 
        return System.Text.RegularExpressions.Regex.Replace(temp, "&#x[0-9a-f]{1,6};", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    }
}
//eg:
FreeProductExpand model = Deserialize < FreeProductExpand > (xmlstr);
string anstr = model.Answer;
xxxBusinessDTO entity = new xxxBusinessDTO();
var query = entity.GetType().GetProperties().Select(x = >x.Name).ToList();
foreach(var item in query) {
    this.listBox1.Items.Add(item);
}
this.label1.Text = string.Format("类 xxxBusinessDTO 共{0}个字段", query.Count);

//匹配
var checkarr = checkstr.Split(','); //checkstr--->ID,ProductID,ProductPrice,...
checkarr.ToList().ForEach(x = >{
    if (!query.Any(t = >t.ToString() == x.ToString())) {
        this.listBox2.Items.Add(x);
    }
});


object转byte[]:

private byte[] ObjectToByteArray(object obj)
        {
            if (obj == null)
                return new byte[] { };

            var bf = new BinaryFormatter();
            using (var ms = new MemoryStream())
            {
                bf.Serialize(ms, obj);
                return ms.ToArray();
            }
        }

利用动态对象和反射,给属性赋值(简单的mapping):

public class CCMapper<T> where T : class
    {
        //为了避免不同线程造成对静态字段更改的不可控事件发生 通常静态字段都使用readonly 表示初始化以后 就只读了 
        private static readonly Dictionary<string, PropertyInfo> PropertyMap;
        /// <summary>
        /// 静态构造函数只在类被调用的第一次启动 类似初始化的作用
        /// 静态构造函数不会建立一个实例 而是用于初始化函数本身的一些static的字段的
        /// 没有参数 也没有修饰符 
        /// </summary>
        static CCMapper() //静态够着函数只执行一次
        {
            PropertyMap = typeof(T).GetProperties().ToDictionary(p => p.Name.ToLower(), p => p);
        }

        public static void Map(System.Dynamic.ExpandoObject source, T destination)
        {
            if (source == null)
                throw new ArgumentNullException("source");
            if (destination == null)
                throw new ArgumentNullException("destination");

            foreach (var kv in source)
            {
                PropertyInfo p;
                if (PropertyMap.TryGetValue(kv.Key.ToLower(), out p))
                {
                    var propType = p.PropertyType;
                    if (kv.Value == null)
                    {
                        if (!propType.IsByRef && propType.Name != "Nullable`1")
                        {
                            throw new ArgumentException("not nullable");
                        }
                    }
                    p.SetValue(destination, kv.Value == DBNull.Value ? default(T) : kv.Value, null);
                }
            }
        }
    }
使用demo:

static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[]
            { 
                new DataColumn("Name", typeof(string)),
                new DataColumn("Address", typeof(string)),
                new DataColumn("Score", typeof(int)),
                new DataColumn("Brithday", typeof(DateTime))
            });

            DataRow dr = dt.NewRow();
            dr["Name"] = "jon";
            dr["Address"] = "浙江杭州";
            dr["Score"] = 70;
            dr["Brithday"] = new DateTime(1987, 9, 20);
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["Name"] = "joyhen";
            dr["Address"] = "文三西路";
            dr["Score"] = 58;
            dr["Brithday"] = DateTime.Now.AddYears(-20);
            dt.Rows.Add(dr);

            var objects = new List<dynamic>();

            foreach (DataRow row in dt.Rows)
            {
                dynamic obj = new System.Dynamic.ExpandoObject();

                foreach (DataColumn column in dt.Columns)
                {
                    var x = (IDictionary<string, object>)obj;
                    x.Add(column.ColumnName, row[column.ColumnName]);
                }
                objects.Add(obj);
            }

            var retval = new List<Tb_Unser>();
            foreach (dynamic item in objects)
            {
                var o = new Tb_Unser();
                CCMapper<Tb_Unser>.Map(item, o);
                retval.Add(o);
            }

            //return retval;
            var str = string.Join(",", retval.Select(x => x.Name).ToArray());
            Console.WriteLine(str);
        }

前面提到了ExpandObject,那么我们顺带一说mvc中的序列化,很简单,json.net就ok,这里用Contet输出

public ActionResult Data() 
{ 
    dynamic expando = new ExpandoObject(); 
    expando.name = "Jon Skeet"; 
    expando.age = 46;

    var json = JsonConvert.SerializeObject(expando);
    return Content(json, "application/json"); 
} 

获取枚举项目集合:

string[] itemsarr = Enum.GetNames(typeof(PropertyType)); //枚举集合
PropertyType是枚举对象

Json.net时间格式处理:

 /// <summary>
    /// 序列化、反序列化 处理类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class JsonUtils
    {
        private static readonly IsoDateTimeConverter _timeFormat;
        static JsonUtils()
        {
            _timeFormat = _timeFormat = new IsoDateTimeConverter()
            {
                DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
            };
        }

        /// <summary>
        /// 序列化
        /// </summary>
        public static string JsonSerializer(object obj)
        {
            //return JsonConvert.SerializeObject(obj, Formatting.None, new JsonSerializerSettings()
            return JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver(),
                Converters = new JsonConverter[1] { _timeFormat }
            });
        }

        /// <summary>
        /// 反序列化
        /// </summary>
        public static T DeserializeObject<T>(string str)
        {
            if (string.IsNullOrEmpty(str)) return default(T);
            return JsonConvert.DeserializeObject<T>(str);
        }
    }
class CoolMother
        {
            public static Func<CoolMother> Activator { get; protected set; }

            //防止空引用
            static CoolMother()
            {
                Activator = () => new CoolMother();
            }

            public CoolMother()
            {
                Message = "I am the mother";
            }

            public string Message { get; protected set; }
        }

        class HotDaughter : CoolMother
        {
            public HotDaughter()
            {
                Activator = () => new HotDaughter();
                Message = "I am the daughter";
            }
        }

测试调用:

Console.WriteLine(HotDaughter.Activator().Message); //触发几类的静态构造函数
var create = new HotDaughter(); //重写了基类的Activator和Message
Console.WriteLine(HotDaughter.Activator().Message);
I am the mother
I am the daughter

GZip压缩:

public static class CompressionHelper
        {
            /// <summary> 
            /// Compress the byte[] 
            /// </summary> 
            /// <param name="input"></param> 
            /// <returns></returns> 
            public static byte[] Compress(byte[] input)
            {
                byte[] output;
                using (MemoryStream ms = new MemoryStream())
                {
                    using (GZipStream gs = new GZipStream(ms, CompressionMode.Compress))
                    {
                        gs.Write(input, 0, input.Length);
                        gs.Close();
                        output = ms.ToArray();
                    }
                    ms.Close();
                }
                return output;
            }

            /// <summary> 
            /// Decompress the byte[] 
            /// </summary> 
            /// <param name="input"></param> 
            /// <returns></returns> 
            public static byte[] Decompress(byte[] input)
            {
                List<byte> output = new List<byte>();
                using (MemoryStream ms = new MemoryStream(input))
                {
                    using (GZipStream gs = new GZipStream(ms, CompressionMode.Decompress))
                    {
                        int readByte = gs.ReadByte();
                        while (readByte != -1)
                        {
                            output.Add((byte)readByte);
                            readByte = gs.ReadByte();
                        }
                        gs.Close();
                    }
                    ms.Close();
                }
                return output.ToArray();
            }
        }

Using classic ADO.NET in ASP.NET 5: http://blog.developers.ba/using-classic-ado-net-in-asp-net-vnext/










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值