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();
}
}

最新文章

  1. 个人项目制作(PSP)
  2. Java多线程编程核心技术---对象及变量的并发访问(一)
  3. 洛谷 P1330 封锁阳光大学 Label:染色问题
  4. 01 Node.js简介, 安装&amp;配置
  5. JSON.parse()和JSON.stringify()的区别
  6. CentOS下添加新硬盘
  7. busybox下mount nfs的命令
  8. The JRE could not be found.Edit the server and change the JRE location.
  9. python 日期、时间戳转换
  10. C#中转义字符
  11. vue表格实现固定表头首列
  12. HDU 4309 Seikimatsu Occult Tonneru (状压 + 网络流)
  13. html开发环境
  14. ABP-Zero模块
  15. PXE,ipmi,bare metal
  16. JavaScript - this详解 (三)
  17. BZOJ3197:[SDOI2013]刺客信条——题解
  18. Node.js 向一个文件添加内容
  19. 复制构造函数被调用的三种情况------新标准c++程序设计
  20. os.popen(&#39;python hello_out.py&#39;)中Python程序执行时默认的当前路径为MS-DOS CMD的默认路径

热门文章

  1. Android_字符串转换
  2. Android 中的冷启动和热启动
  3. [C语言]类型限定词const解析
  4. 使用aapt解析apk,得到package内容
  5. mysql中难以理解的sql
  6. 阿里云提示ECS服务器存在漏洞处理方法
  7. Oracle.DataAccess.Client.OracleConnection.Open()报错System. NullReferenceException
  8. 【转】详解spring 每个jar的作用
  9. java并发编程的艺术(三)---lock源码
  10. Angular2学习笔记一