zoukankan      html  css  js  c++  java
  • C#实体类对象修改日志记录

    public static class LogParser
    {
        /// <summary>
        /// 对象转为JSON
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static string Parse(Object model)
        {
            if (model == null)
            {
                return "null";
            }
            Type type = model.GetType();
            if (type.IsPrimitive)//基本类型
            {
                if (model is Boolean)
                {
                    return model.ToString().ToLower();
                }
                return model.ToString();
            }
            else if (model is string || model is DateTime || model is Enum || model is ObjectId)//字符串
            {
                return $""{model.ToString()}"";
            }
            else if (model is IDictionary dictionary)//Dictionary字段
            {
                return ParseDictionary(dictionary);
            }
            else if (model is IEnumerable enumerable)//可遍历的集合
            {
                return ParseEnumerable(enumerable);
            }
            else //实体对象
            {
                return ParseObject(model);
            }
        }
    
        /// <summary>
        /// 字典类型
        /// </summary>
        /// <param name="dic"></param>
        /// <returns></returns>
        private static string ParseDictionary(IDictionary dic)
        {
            StringBuilder jsonBuffer = new StringBuilder("{");
            List<string> lstKV = new List<string>();
            foreach (var key in dic.Keys)
            {
                lstKV.Add($"{Parse(key)}:{Parse(dic[key])}");
            }
            jsonBuffer.AppendJoin(",", lstKV);
            jsonBuffer.Append("}");
            return jsonBuffer.ToString();
        }
    
        /// <summary>
        /// 集合类型
        /// </summary>
        /// <param name="enumerable"></param>
        /// <returns></returns>
        private static string ParseEnumerable(IEnumerable enumerable)
        {
            StringBuilder jsonBuffer = new StringBuilder("[");
    
            List<string> lstItems = new List<string>();
            foreach (var item in enumerable)
            {
                lstItems.Add(Parse(item));
            }
    
            jsonBuffer.AppendJoin(",", lstItems);
            jsonBuffer.Append("]");
            return jsonBuffer.ToString();
        }
    
        /// <summary>
        /// 对象类型
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        private static string ParseObject(Object obj)
        {
            StringBuilder jsonBuffer = new StringBuilder("{");
            List<string> lstKV = new List<string>();
            foreach (var prop in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy))
            {
                string value = Parse(prop.GetValue(obj));
                string name = prop.GetCustomAttribute<DescriptionAttribute>()?.Description ?? prop.Name;
                lstKV.Add($""{name}":{value}");
            }
            jsonBuffer.AppendJoin(",", lstKV);
            jsonBuffer.Append("}");
            return jsonBuffer.ToString();
        }
    }
    
  • 相关阅读:
    腾讯大数据开发实习面经
    网易游戏2021暑期实习生 游戏运营管理面经 已拿offer
    猿辅导大数据校招1面+2面面经
    虎牙直播内容运营(英雄联盟)三轮超高质量面经分享
    字节跳动日常实习广告大数据研发实习面经(初面)
    运营小白超详细三轮面试拿到字节跳动offer
    字节跳动前端日常实习三轮技术面经
    360大数据开发实习面经
    美团大数据开发工程师校招面经
    高级运维工程师的打怪升级之路
  • 原文地址:https://www.cnblogs.com/AlvinLee/p/10192011.html
Copyright © 2011-2022 走看看