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();
}
}
C#实体类对象修改日志记录的更多相关文章
- Mybaits 源码解析 (八)----- 全网最详细,没有之一:结果集 ResultSet 自动映射成实体类对象(上篇)
上一篇文章我们已经将SQL发送到了数据库,并返回了ResultSet,接下来就是将结果集 ResultSet 自动映射成实体类对象.这样使用者就无需再手动操作结果集,并将数据填充到实体类对象中.这可大 ...
- Hibernate_day02--课程安排_主键生成策略_对实体类crud操作_实体类对象状态
Hibernate_day02 上节内容 今天内容 实体类编写规则 Hibernate主键生成策略 实体类操作 对实体类crud操作 添加操作 根据id查询 修改操作 删除操作 实体类对象状态(概念) ...
- NSDictionary转化为实体类对象
方法一: 使用objective-c NSObject自带的方法 setValuesForKeysWithDictionary:dict 作用是: 如果NSDictionary中的key和实体类对象的 ...
- java 获取实体类对象属性值的方法
在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...
- @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法
JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...
- 使用fastjson 进行jsonObject转实体类对象
使用fastjson 进行jsonObject转实体类对象 1 <dependency> 2 <groupId>com.alibaba</groupId> 3 ...
- solr搜索结果转实体类对象的两种方法
问题:就是把从solr搜索出来的结果转成我们想要的实体类对象,很常用的情景. 1.使用@Field注解 @Field这个注解放到实体类的属性[字段]中,例如下面 public class User{ ...
- SpringBoot实体类对象和json格式的转化
1.引入maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson ...
- c# 利用反射动态给实体类对象赋值
转:http://blog.sina.com.cn/s/blog_659a572b0100xp5s.html 例子如下 using System; using System.Collections.G ...
随机推荐
- Flow类注释解读
参考: (1)https://docs.oracle.com/javase/specs/jls/se7/html/jls-16.html (2)https://docs.oracle.com/java ...
- C/C++ -- Gui编程 -- Qt库的使用 -- 使用.ui文件
1.创建Qt空工程 2.添加Qt设计师界面,无按钮对话框helloqt.ui 3.编辑界面,添加部件,修改对话框对象名为HelloQt <?xml version="1.0" ...
- mongodb-导出数据到csv文件或json文件
在mongodb的bin目录下, 有一个mongoexport, 可用于数据的导出 [wenbronk@localhost bin]$ ./mongoexport --help Usage: mong ...
- C#的Equals不区分大小写
代码:System.Windows.Forms.MessageBox.Show("abc".Equals("ABC", StringComparison.Inv ...
- Nodejs学习笔记(十一)—数据采集器示例(request和cheerio)
写在之前 很多人都有做数据采集的需求,用不同的语言,不同的方式都能实现,我以前也用C#写过,主要还是发送各类请求和正则解析数据比较繁琐些,总体来说没啥不好的,就是效率要差一些, 用nodejs写采集程 ...
- SSH(Struts 2.3.31 + Spring 4.1.6 + Hibernate 5.0.12 + Ajax)框架整合实现简单的增删改查(包含分页,Ajax 无刷新验证该用户是否存在)
软件152 余建强 该文将以员工.部门两表带领大家进入SSH的整合教程: 源码下载:http://download.csdn.net/detail/qq_35318576/9877235 SSH 整合 ...
- cordova打包APK,SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode ...
javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是”javascript 严格模式”,比如下述的代码运行就会报错: let hello = 'hello worl ...
- [转] Linux Daemon Writing HOWTO
Linux Daemon Writing HOWTO Devin Watson v1.0, May 2004 This document shows how to write a daemon in ...
- Deep Q-Network 学习笔记(五)—— 改进③:Prioritized Replay 算法
也就是优先采样,这里的推导部分完全没看懂 Orz,这里也只是记录实现代码. 也就是看了以下两篇文章对应做了实现. 莫烦老师的教程: https://morvanzhou.github.io/tutor ...
- Css3盒子尺寸
box-sizing属性 用来改变盒模式中的宽度和高度默认的计算方式. box-sizing: 1.content-box(默认值): 宽度和高度只包含内容区域 2.border-box: 宽度和高度 ...