为Object新增toJson扩展方法
This commit is contained in:
parent
e442a099e6
commit
4db845412d
|
@ -4,6 +4,7 @@ using System.ComponentModel;
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Falcon.SugarApi
|
||||
{
|
||||
|
@ -19,8 +20,8 @@ namespace Falcon.SugarApi
|
|||
/// <param name="source">原对象</param>
|
||||
/// <param name="target">目标对象</param>
|
||||
public static TSource CloneTo<TSource>(this TSource source,[NotNull] object target) where TSource : class {
|
||||
_=source??throw new ArgumentNullException(nameof(source));
|
||||
_=target??throw new ArgumentNullException(nameof(target));
|
||||
_ = source ?? throw new ArgumentNullException(nameof(source));
|
||||
_ = target ?? throw new ArgumentNullException(nameof(target));
|
||||
var all = from s in source.GetType().GetProperties()
|
||||
join t in target.GetType().GetProperties() on s.Name equals t.Name
|
||||
select new { s,t };
|
||||
|
@ -50,15 +51,15 @@ namespace Falcon.SugarApi
|
|||
/// <param name="targetType">目标类型</param>
|
||||
/// <returns>转换后的类型</returns>
|
||||
public static object? ChangeType(this object? source,Type targetType) {
|
||||
if(targetType==null) {
|
||||
if(targetType == null) {
|
||||
throw new ArgumentNullException("targetType");
|
||||
}
|
||||
if(source==null) {
|
||||
if(source == null) {
|
||||
return null;
|
||||
}
|
||||
if(targetType.IsGenericType&&targetType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) {
|
||||
if(targetType.IsGenericType && targetType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) {
|
||||
NullableConverter nullableConverter = new NullableConverter(targetType);
|
||||
targetType=nullableConverter.UnderlyingType;
|
||||
targetType = nullableConverter.UnderlyingType;
|
||||
}
|
||||
return Convert.ChangeType(source,targetType);
|
||||
}
|
||||
|
@ -70,7 +71,7 @@ namespace Falcon.SugarApi
|
|||
/// <returns>对象本身</returns>
|
||||
/// <exception cref="ArgumentNullException">对象为null</exception>
|
||||
public static object? ThrowNullExceptionWhenNull(this object? obj) {
|
||||
if(obj==null) {
|
||||
if(obj == null) {
|
||||
throw new ArgumentNullException();
|
||||
}
|
||||
return obj;
|
||||
|
@ -84,9 +85,9 @@ namespace Falcon.SugarApi
|
|||
public static IEnumerable<ExpandPropertyInfo> ExpandProperties(this object obj) {
|
||||
foreach(PropertyInfo p in obj.GetType().GetProperties()) {
|
||||
yield return new ExpandPropertyInfo {
|
||||
Name=p.Name,
|
||||
Type=p.PropertyType,
|
||||
Value=p.CanRead ? p.GetValue(obj) : null,
|
||||
Name = p.Name,
|
||||
Type = p.PropertyType,
|
||||
Value = p.CanRead ? p.GetValue(obj) : null,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -96,7 +97,7 @@ namespace Falcon.SugarApi
|
|||
/// </summary>
|
||||
/// <param name="obj">要测试的对象</param>
|
||||
/// <returns>True表示对象为null,否则不为null</returns>
|
||||
public static bool IsNull([AllowNull] this object obj) => obj==null;
|
||||
public static bool IsNull([AllowNull] this object obj) => obj == null;
|
||||
|
||||
/// <summary>
|
||||
/// 对象是否不为null。与IsNull相反
|
||||
|
@ -113,7 +114,7 @@ namespace Falcon.SugarApi
|
|||
/// <exception cref="ObjectSetValueException">设置属性值引发的异常</exception>
|
||||
public static T SetPropertyValue<T>(this T obj,Func<PropertyInfo,object?,object?> getValue) where T : class {
|
||||
foreach(PropertyInfo info in obj.GetType().GetProperties()) {
|
||||
if(info.CanWrite&&info.CanRead) {
|
||||
if(info.CanWrite && info.CanRead) {
|
||||
object? originalVal = info.GetValue(obj);
|
||||
var val = getValue(info,originalVal);
|
||||
try {
|
||||
|
@ -126,6 +127,20 @@ namespace Falcon.SugarApi
|
|||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将对象转换为Json字符串格式
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象的类型</typeparam>
|
||||
/// <param name="obj">对象</param>
|
||||
/// <param name="OptionBuilder">转换参数</param>
|
||||
/// <returns>转换后字符串</returns>
|
||||
public static string ToJson<T>(this T obj,Action<JsonSerializerOptions>? OptionBuilder = null) {
|
||||
var option = new JsonSerializerOptions();
|
||||
OptionBuilder?.Invoke(option);
|
||||
var ser = new JsonSerialize.JsonSerializeFactory().CreateJsonSerialize(option);
|
||||
return ser.Serialize(obj);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -161,9 +176,9 @@ namespace Falcon.SugarApi
|
|||
/// <param name="innExceprtion">内部异常</param>
|
||||
public ObjectSetValueException(object? obj,PropertyInfo? info,object? val,Exception innExceprtion)
|
||||
: base("为目标属性设置值时引发的异常",innExceprtion) {
|
||||
this.Obj=obj;
|
||||
this.Property=info;
|
||||
this.Value=val;
|
||||
this.Obj = obj;
|
||||
this.Property = info;
|
||||
this.Value = val;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in New Issue
Block a user