using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Text; namespace learun.util { /// /// 版 本 EasyCode EC管理后台 /// Copyright (c) 2019-present EC管理有限公司 /// 创建人:tobin /// 日 期:2019.09.09 /// 描 述:扩展.json序列反序列化 /// public static class ExtensionsJson { /// /// 转成json对象 /// /// json字串 /// public static object ToJson(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject(Json); } /// /// 转成json字串 /// /// 对象 /// public static string ToJson(this object obj) { var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }; return JsonConvert.SerializeObject(obj, timeConverter); } /// /// 转成json字串 /// /// 对象 /// 时间格式化 /// public static string ToJson(this object obj, string datetimeformats) { var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats }; return JsonConvert.SerializeObject(obj, timeConverter); } /// /// 字串反序列化成指定对象实体 /// /// 实体类型 /// 字串 /// public static T ToObject(this string Json) { return Json == null ? default(T) : JsonConvert.DeserializeObject(Json); } /// /// 字串反序列化成指定对象实体(列表) /// /// 实体类型 /// 字串 /// public static List ToList(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject>(Json); } /// /// 字串反序列化成DataTable /// /// 字串 /// public static DataTable ToTable(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject(Json); } /// /// 字串反序列化成linq对象 /// /// 字串 /// public static JObject ToJObject(this string Json) { return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace(" ", "")); } } /// /// 检测扩展 /// public static class ExtensionsValid { /// /// 检测空值,为null则抛出ArgumentNullException异常 /// /// 对象 /// 参数名 public static void CheckNull(this object obj, string parameterName) { if (obj == null) throw new ArgumentNullException(parameterName); } /// /// 是否为空 /// /// 值 public static bool IsEmpty(this string value) { return string.IsNullOrWhiteSpace(value); } /// /// 是否为空 /// /// 值 public static bool IsEmpty(this Guid? value) { if (value == null) return true; return IsEmpty(value.Value); } /// /// 是否为空 /// /// 值 public static bool IsEmpty(this Guid value) { if (value == Guid.Empty) return true; return false; } /// /// 是否为空 /// /// 值 public static bool IsEmpty(this object value) { if (value != null && !string.IsNullOrEmpty(value.ToString())) { return false; } else { return true; } } /// /// 安全返回值 /// /// 可空值 public static T SafeValue(this T? value) where T : struct { return value ?? default(T); } /// /// 是否包含 /// /// 字串 /// 包含字串 /// public static bool ContainsEx(this string obj, string value) { if (string.IsNullOrEmpty(obj)) { return false; } else { return obj.Contains(value); } } /// /// 字串是否在指定字串中存在 /// /// 字串 /// 被包含字串 /// public static bool Like(this string obj, string value) { if (string.IsNullOrEmpty(value)) { return false; } else if (string.IsNullOrEmpty(obj)) { return false; } else { if (value.IndexOf(obj) != -1) { return true; } else { return false; } } } /// /// 数据字段类型转化 /// /// 字串 /// public static DbType ToDbType(this string str) { DbType res = DbType.String; switch (str) { case "int?": res = DbType.Int32; break; case "byte?": res = DbType.Byte; break; case "float?": res = DbType.Single; break; case "decimal?": res = DbType.Decimal; break; case "string": res = DbType.String; break; case "bool?": res = DbType.Boolean; break; case "DateTime?": res = DbType.DateTime; break; } return res; } } /// /// 字串扩展 /// public static class ExtensionsStr { /// /// 获取格式化字符串,带时分秒,格式:"yyyy-MM-dd HH:mm:ss" /// /// 日期 /// 是否移除秒 public static string ToDateTimeString(this DateTime dateTime, bool isRemoveSecond = false) { if (isRemoveSecond) return dateTime.ToString("yyyy-MM-dd HH:mm"); return dateTime.ToString("yyyy-MM-dd HH:mm:ss"); } /// /// 获取格式化字符串,带时分秒,格式:"yyyy-MM-dd HH:mm:ss" /// /// 日期 /// 是否移除秒 public static string ToDateTimeString(this DateTime? dateTime, bool isRemoveSecond = false) { if (dateTime == null) return string.Empty; return ToDateTimeString(dateTime.Value, isRemoveSecond); } /// /// 获取格式化字符串,不带时分秒,格式:"yyyy-MM-dd" /// /// 日期 public static string ToDateString(this DateTime dateTime) { return dateTime.ToString("yyyy-MM-dd"); } /// /// 获取格式化字符串,不带时分秒,格式:"yyyy-MM-dd" /// /// 日期 public static string ToDateString(this DateTime? dateTime) { if (dateTime == null) return string.Empty; return ToDateString(dateTime.Value); } /// /// 获取格式化字符串,不带年月日,格式:"HH:mm:ss" /// /// 日期 public static string ToTimeString(this DateTime dateTime) { return dateTime.ToString("HH:mm:ss"); } /// /// 获取格式化字符串,不带年月日,格式:"HH:mm:ss" /// /// 日期 public static string ToTimeString(this DateTime? dateTime) { if (dateTime == null) return string.Empty; return ToTimeString(dateTime.Value); } /// /// 获取格式化字符串,带毫秒,格式:"yyyy-MM-dd HH:mm:ss.fff" /// /// 日期 public static string ToMillisecondString(this DateTime dateTime) { return dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); } /// /// 获取格式化字符串,带毫秒,格式:"yyyy-MM-dd HH:mm:ss.fff" /// /// 日期 public static string ToMillisecondString(this DateTime? dateTime) { if (dateTime == null) return string.Empty; return ToMillisecondString(dateTime.Value); } /// /// 获取格式化字符串,不带时分秒,格式:"yyyy年MM月dd日" /// /// 日期 public static string ToChineseDateString(this DateTime dateTime) { return string.Format("{0}年{1}月{2}日", dateTime.Year, dateTime.Month, dateTime.Day); } /// /// 获取格式化字符串,不带时分秒,格式:"yyyy年MM月dd日" /// /// 日期 public static string ToChineseDateString(this DateTime? dateTime) { if (dateTime == null) return string.Empty; return ToChineseDateString(dateTime.SafeValue()); } /// /// 获取格式化字符串,带时分秒,格式:"yyyy年MM月dd日 HH时mm分" /// /// 日期 /// 是否移除秒 public static string ToChineseDateTimeString(this DateTime dateTime, bool isRemoveSecond = false) { StringBuilder result = new StringBuilder(); result.AppendFormat("{0}年{1}月{2}日", dateTime.Year, dateTime.Month, dateTime.Day); result.AppendFormat(" {0}时{1}分", dateTime.Hour, dateTime.Minute); if (isRemoveSecond == false) result.AppendFormat("{0}秒", dateTime.Second); return result.ToString(); } /// /// 获取格式化字符串,带时分秒,格式:"yyyy年MM月dd日 HH时mm分" /// /// 日期 /// 是否移除秒 public static string ToChineseDateTimeString(this DateTime? dateTime, bool isRemoveSecond = false) { if (dateTime == null) return string.Empty; return ToChineseDateTimeString(dateTime.Value); } } /// /// 转化扩展 /// public static class ExtensionsConvert { #region 数值转换 /// /// 转换为整型 /// /// 数据 public static int ToInt(this object data) { if (data == null) return 0; int result; var success = int.TryParse(data.ToString(), out result); if (success) return result; try { return Convert.ToInt32(ToDouble(data, 0)); } catch (Exception) { return 0; } } /// /// 转换为可空整型 /// /// 数据 public static int? ToIntOrNull(this object data) { if (data == null) return null; int result; bool isValid = int.TryParse(data.ToString(), out result); if (isValid) return result; return null; } /// /// 转换为双精度浮点数 /// /// 数据 public static double ToDouble(this object data) { if (data == null) return 0; double result; return double.TryParse(data.ToString(), out result) ? result : 0; } /// /// 转换为双精度浮点数,并按指定的小数位4舍5入 /// /// 数据 /// 小数位数 public static double ToDouble(this object data, int digits) { return Math.Round(ToDouble(data), digits); } /// /// 转换为可空双精度浮点数 /// /// 数据 public static double? ToDoubleOrNull(this object data) { if (data == null) return null; double result; bool isValid = double.TryParse(data.ToString(), out result); if (isValid) return result; return null; } /// /// 转换为高精度浮点数 /// /// 数据 public static decimal ToDecimal(this object data) { if (data == null) return 0; decimal result; return decimal.TryParse(data.ToString(), out result) ? result : 0; } /// /// 转换为高精度浮点数,并按指定的小数位4舍5入 /// /// 数据 /// 小数位数 public static decimal ToDecimal(this object data, int digits) { return Math.Round(ToDecimal(data), digits); } /// /// 转换为可空高精度浮点数 /// /// 数据 public static decimal? ToDecimalOrNull(this object data) { if (data == null) return null; decimal result; bool isValid = decimal.TryParse(data.ToString(), out result); if (isValid) return result; return null; } /// /// 转换为可空高精度浮点数,并按指定的小数位4舍5入 /// /// 数据 /// 小数位数 public static decimal? ToDecimalOrNull(this object data, int digits) { var result = ToDecimalOrNull(data); if (result == null) return null; return Math.Round(result.Value, digits); } #endregion 数值转换 #region 日期转换 /// /// 转换为日期 /// /// 数据 public static DateTime ToDate(this object data) { if (data == null) return DateTime.MinValue; DateTime result; return DateTime.TryParse(data.ToString(), out result) ? result : DateTime.MinValue; } /// /// 转换为可空日期 /// /// 数据 public static DateTime? ToDateOrNull(this object data) { if (data == null) return null; DateTime result; bool isValid = DateTime.TryParse(data.ToString(), out result); if (isValid) return result; return null; } #endregion 日期转换 #region 布尔转换 /// /// 转换为布尔值 /// /// 数据 public static bool ToBool(this object data) { if (data == null) return false; bool? value = GetBool(data); if (value != null) return value.Value; bool result; return bool.TryParse(data.ToString(), out result) && result; } /// /// 获取布尔值 /// /// 数据 /// private static bool? GetBool(this object data) { switch (data.ToString().Trim().ToLower()) { case "0": return false; case "1": return true; case "是": return true; case "否": return false; case "yes": return true; case "no": return false; default: return null; } } /// /// 转换为可空布尔值 /// /// 数据 public static bool? ToBoolOrNull(this object data) { if (data == null) return null; bool? value = GetBool(data); if (value != null) return value.Value; bool result; bool isValid = bool.TryParse(data.ToString(), out result); if (isValid) return result; return null; } #endregion 布尔转换 #region 字符串转换 /// /// 转换为字符串 /// /// 数据 public static string ToString(this object data) { return data == null ? string.Empty : data.ToString().Trim(); } #endregion 字符串转换 } }