| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | 
							- using System;
 
- using System.ComponentModel;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Text.Encodings.Web;
 
- using System.Text.Json;
 
- using System.Text.Json.Serialization;
 
- using System.Text.Unicode;
 
- namespace DPP_YH_Core.Extensions
 
- {
 
-     public static class ObjectExtension
 
-     {
 
-         private class DateTimeConverter : JsonConverter<DateTime>
 
-         {
 
-             public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
 
-             {
 
-                 return DateTime.Parse(reader.GetString());
 
-             }
 
-             public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
 
-             {
 
-                 writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// <para>对象转JsonString</para>
 
-         /// <para>如果对象本身是String类型则直接返回</para>
 
-         /// </summary>
 
-         /// <param name="obj">对象</param>
 
-         /// <param name="formarting">是否开启格式化,格式化会多占用一些字节,默认不格式化</param>
 
-         /// <returns></returns>
 
-         public static string ToJsonStr(this object obj, bool formarting = false)
 
-         {
 
-             if (obj == null) return "";
 
-             if (obj.GetType() == typeof(string)) return obj as string;
 
-             if (obj.GetType() == typeof(StringBuilder)) return ((StringBuilder)obj).ToString();
 
-             var options = new JsonSerializerOptions
 
-             {
 
-                 WriteIndented = formarting,
 
-                 IncludeFields = true,
 
-                 DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
 
-             };
 
-             options.Converters.Add(new DateTimeConverter());//yyyy-MM-dd HH:mm:ss
 
-                                                             //不加这句非ASCII字符会被序列化为Unicode编号,类似于\u8C03
 
-             options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
 
-             options.GetConverter(obj.GetType());
 
-             var res = JsonSerializer.Serialize(obj, options);
 
-             return res;
 
-         }
 
-         public static string ToNewtonJsonStr(this object obj)
 
-         {
 
-             return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
 
-         }
 
-         public static T ToJson<T>(this string obj)
 
-         {
 
-             return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(obj);
 
-         }
 
-         public static T To<T>(this Object @this)
 
-         {
 
-             if (@this != null)
 
-             {
 
-                 Type targetType = typeof(T);
 
-                 if (@this.GetType() == targetType)
 
-                 {
 
-                     return (T)@this;
 
-                 }
 
-                 TypeConverter converter = TypeDescriptor.GetConverter(@this);
 
-                 if (converter != null)
 
-                 {
 
-                     if (converter.CanConvertTo(targetType))
 
-                     {
 
-                         return (T)converter.ConvertTo(@this, targetType);
 
-                     }
 
-                 }
 
-                 converter = TypeDescriptor.GetConverter(targetType);
 
-                 if (converter != null)
 
-                 {
 
-                     if (converter.CanConvertFrom(@this.GetType()))
 
-                     {
 
-                         return (T)converter.ConvertFrom(@this);
 
-                     }
 
-                 }
 
-                 if (@this == DBNull.Value)
 
-                 {
 
-                     return (T)(object)null;
 
-                 }
 
-             }
 
-             return (T)@this;
 
-         }
 
-         public static object To(this Object @this, Type type)
 
-         {
 
-             if (@this != null)
 
-             {
 
-                 Type targetType = type;
 
-                 if (@this.GetType() == targetType)
 
-                 {
 
-                     return @this;
 
-                 }
 
-                 TypeConverter converter = TypeDescriptor.GetConverter(@this);
 
-                 if (converter != null)
 
-                 {
 
-                     if (converter.CanConvertTo(targetType))
 
-                     {
 
-                         return converter.ConvertTo(@this, targetType);
 
-                     }
 
-                 }
 
-                 converter = TypeDescriptor.GetConverter(targetType);
 
-                 if (converter != null)
 
-                 {
 
-                     if (converter.CanConvertFrom(@this.GetType()))
 
-                     {
 
-                         return converter.ConvertFrom(@this);
 
-                     }
 
-                 }
 
-                 if (@this == DBNull.Value)
 
-                 {
 
-                     return null;
 
-                 }
 
-             }
 
-             return @this;
 
-         }
 
-         /// <summary>
 
-         /// <para>将源对象的属性值映射到target对象上,(target==null时直接返回)</para>
 
-         /// <para>该方法使用反射</para>
 
-         /// <para>源对象和目标对象可以是不同对象,只要属性名称一致即可,如Model1映射到Model2</para>
 
-         /// </summary>
 
-         /// <typeparam name="T">target泛型类</typeparam>
 
-         /// <param name="obj">源对象</param>
 
-         /// <param name="target">目标对象</param>
 
-         public static void MapTo<T>(this object obj, T target) where T : class, new()
 
-         {
 
-             if (obj == null || target == null) return;
 
-             var objProps = obj.GetType().GetProperties();
 
-             if (objProps == null || objProps.Length == 0) return;
 
-             var listObjProps = objProps.ToList();
 
-             //var str = JsonConvert.SerializeObject(obj);
 
-             //var foo = JsonConvert.DeserializeObject<T>(str);
 
-             var props = typeof(T).GetProperties();
 
-             foreach (var item in props)
 
-             {
 
-                 if (!item.CanWrite) continue;
 
-                 var find = listObjProps.Find(p => p.Name == item.Name);
 
-                 if (find == null) continue;
 
-                 var value = find.GetValue(obj);
 
-                 if (value == null) continue;
 
-                 if (item.PropertyType != value.GetType() && !item.PropertyType.Name.Contains("Nullable"))
 
-                 {
 
-                     value = Convert.ChangeType(value, item.PropertyType);
 
-                 }
 
-                 item.SetValue(target, value);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// <para>将源对象的映射为一个新对象</para>
 
-         /// <para>该方法使用json序列化,对象嵌套深度不能超过8层</para>
 
-         /// <para>源对象和目标对象可以是不同对象,只要属性名称一致即可,如Model1映射到Model2</para>
 
-         /// </summary>
 
-         /// <typeparam name="T">返回对象泛型类型</typeparam>
 
-         /// <param name="obj">源对象</param>
 
-         /// <returns></returns>
 
-         public static T MapTo<T>(this object obj)
 
-         {
 
-             string str;
 
-             JsonSerializerOptions options = null;
 
-             if (obj == null)
 
-                 str = "";
 
-             else if (obj.GetType() == typeof(string))
 
-                 str = obj.ToString();
 
-             else if (obj.GetType() == typeof(StringBuilder))
 
-                 str = ((StringBuilder)obj).ToString();
 
-             else
 
-             {
 
-                 options = new JsonSerializerOptions
 
-                 {
 
-                     WriteIndented = false,
 
-                     IncludeFields = true,
 
-                     DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
 
-                 };
 
-                 options.Converters.Add(new DateTimeConverter());//yyyy-MM-dd HH:mm:ss
 
-                 options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
 
-                 str = JsonSerializer.Serialize(obj, options);
 
-             }
 
-             if (options == null)
 
-             {
 
-                 options = new JsonSerializerOptions
 
-                 {
 
-                     WriteIndented = false,
 
-                     IncludeFields = true,
 
-                     DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
 
-                 };
 
-                 options.Converters.Add(new DateTimeConverter());//yyyy-MM-dd HH:mm:ss
 
-                 options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
 
-             }
 
-             if (string.IsNullOrWhiteSpace(str)) return default;
 
-             var res = JsonSerializer.Deserialize<T>(str, options);
 
-             return res;
 
-         }
 
-         //public static T MapTo<T>(this object obj) where T: class,new()
 
-         //{
 
-         //    if (obj == null) return null;
 
-         //    var objProps = obj.GetType().GetProperties();
 
-         //    if (objProps == null || objProps.Length == 0) return null;
 
-         //    T t = new T();
 
-         //    obj.MapTo(t);
 
-         //    return t;
 
-         //}
 
-     }
 
- }
 
 
  |