104 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
 | 
						|
using Newtonsoft.Json;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Reflection;
 | 
						|
 | 
						|
namespace IRaCIS.Core.Infrastructure.Extention
 | 
						|
{
 | 
						|
    public static class ObjectExtension
 | 
						|
    {
 | 
						|
 | 
						|
        public static T Clone<T>(this T source)
 | 
						|
        {
 | 
						|
            // Don't serialize a null object, simply return the default for that object
 | 
						|
            if (Object.ReferenceEquals(source, null))
 | 
						|
            {
 | 
						|
                return default(T);
 | 
						|
            }
 | 
						|
 | 
						|
            var deserializeSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace };
 | 
						|
            var serializeSettings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
 | 
						|
            return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source, serializeSettings), deserializeSettings);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 将对象序列化成稽查需要的Json字符串
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="obj"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static string ToJsonStr(this object obj)
 | 
						|
        {
 | 
						|
 | 
						|
            return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss", ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Ignore });
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 通过类型参数反序列化 JSON 字符串为指定类型的对象
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="jsonStr"></param>
 | 
						|
        /// <param name="type"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static object JsonStrToObject(this string jsonStr, Type type)
 | 
						|
        {
 | 
						|
            return JsonConvert.DeserializeObject(jsonStr, type);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public static Dictionary<string, object> ToDictionary(this object obj)
 | 
						|
        {
 | 
						|
            var json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss", Formatting = Formatting.Indented, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Include });
 | 
						|
            return JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// 将对象序列化成稽查需要的Json字符串
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="obj"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static string ToJsonNotIgnoreNull(this object obj)
 | 
						|
        {
 | 
						|
 | 
						|
            return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss", Formatting = Formatting.Indented, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Include });
 | 
						|
        }
 | 
						|
 | 
						|
        public static Dictionary<string, object> ConvertToDictionary(this object obj)
 | 
						|
        {
 | 
						|
            if (obj == null)
 | 
						|
            {
 | 
						|
                throw new ArgumentNullException(nameof(obj));
 | 
						|
            }
 | 
						|
 | 
						|
            Type type = obj.GetType();
 | 
						|
            PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
 | 
						|
 | 
						|
            Dictionary<string, object> dictionary = new Dictionary<string, object>();
 | 
						|
 | 
						|
            foreach (PropertyInfo property in properties)
 | 
						|
            {
 | 
						|
                string propertyName = property.Name;
 | 
						|
                object propertyValue = property.GetValue(obj);
 | 
						|
                // 如果属性的类型是枚举,将其值保留为整数
 | 
						|
                if (property.PropertyType.IsEnum || (Nullable.GetUnderlyingType(property.PropertyType)?.IsEnum == true && propertyValue != null))
 | 
						|
                {
 | 
						|
                    dictionary.Add(propertyName, (int)propertyValue);
 | 
						|
                }
 | 
						|
                // 检查属性是否是时间类型
 | 
						|
                else if (property.PropertyType == typeof(DateTime) ||
 | 
						|
                     property.PropertyType == typeof(DateTime?) && propertyValue != null)
 | 
						|
                {
 | 
						|
                    DateTime.TryParse(propertyValue.ToString(), out DateTime result);
 | 
						|
                    var dt = ExportExcelConverterDate.DateTimeInternationalToString(result);
 | 
						|
                    // 如果需要,可以对时间值进行特定的处理
 | 
						|
                    dictionary.Add(propertyName, dt);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    dictionary.Add(propertyName, propertyValue);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return dictionary;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |