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中的Switch分析
A switch statement can complete normally iff at least one of the following is true: (1)The switch bl ...
- wordpress时间函数the_time() 详解
一直以来,我对时间显示这一块都没有给予些微的关注,但昨天无意间在网络上看到了上面有一篇文章所说的就是the_time()时间函数,感觉很有必要整理一下,便将其中的内容整理了下来.可能很多朋友对于时间的 ...
- Mac下TensorFlow安装及环境搭建
在学习了一段时间台大李宏毅关于deep learning的课程,以及一些其他机器学习的书之后,终于打算开始动手进行一些实践了. 感觉保完研之后散养状态下,学习效率太低了,于是便想白天学习,晚上对白天学 ...
- OpenStack-Queens版 实践
OpenStack简介 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. OpenStack是一个开源 ...
- 值得收藏的TCP套接口编程文章
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由jackieluo发表于云+社区专栏 TCP客户端-服务器典型事件 下图是TCP客户端与服务器之间交互的一系列典型事件时间表: 首先启 ...
- 修改MVC默认的pageBaseType以添加功能
试想下在MVC的前端页面JS或者html中需要使用多语言,而后端的多语言是维护在资源文件中的,前端如果使用的话需要使用AJAX频繁的获取,一个页面中可能会存在大量的需要语言转换的地方,频繁使用AJAX ...
- 纯Java JDBC连接数据库,且用JDBC实现增删改查的功能
Java JDBC连接数据库 package cn.cqvie.yjq; import java.sql.*; /** * 注册数据库的驱动程序,并得到数据库的连接对象 * @author yu * ...
- UnityShader之屏幕特效基础
1.什么是屏幕特效 我们这里讲的屏幕特效技术,指的是在渲染完整个场景后得到的屏幕图象的基础上,再对这个屏幕图像做一系列处理,实现出屏幕特效,使用这种技术可以为屏幕画面增添各种风格的艺术效果,比如泛光. ...
- ZOJ 1586 QS Network(Kruskal算法求解MST)
题目: In the planet w-503 of galaxy cgb, there is a kind of intelligent creature named QS. QScommunica ...
- [BZOJ 5072]小A的树
Description 题库链接 给你 \(n\) 个节点的一棵树,点分黑白. \(q\) 组询问,每次询问类似于"是否存在树中 \(x\) 个点的连通块恰有 \(y\) 个黑点" ...