You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
using System.Collections.Concurrent; |
|
using System.Globalization; |
|
using Newtonsoft.Json; |
|
using Newtonsoft.Json.Linq; |
|
|
|
namespace BrilliantSightClient.Model.Extension; |
|
|
|
public static class CommonExtension |
|
{ |
|
/// <summary> |
|
/// 安全的ToString |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
/// <returns></returns> |
|
public static string ToSafeString(this object obj) |
|
{ |
|
if (null == obj) |
|
{ |
|
return ""; |
|
} |
|
else |
|
{ |
|
return obj.ToString(); |
|
} |
|
} |
|
// 缓存类型是否重写ToString的检查结果(提升性能) |
|
private static readonly ConcurrentDictionary<Type, bool> _toStringOverriddenCache = new(); |
|
|
|
/// <summary> |
|
/// 增强版安全ToString(自动处理未重写ToString的情况) |
|
/// </summary> |
|
public static string ToSafeAbundantString(this object obj) |
|
{ |
|
if (obj == null) return ""; |
|
|
|
var type = obj.GetType(); |
|
|
|
// 判断是否重写了ToString方法 |
|
var hasCustomToString = _toStringOverriddenCache.GetOrAdd(type, t => |
|
{ |
|
var toStringMethod = t.GetMethod("ToString", Type.EmptyTypes); |
|
return toStringMethod?.DeclaringType != typeof(object); |
|
}); |
|
|
|
try |
|
{ |
|
string result = hasCustomToString |
|
? obj.ToString() // 使用自定义的ToString |
|
: JsonConvert.SerializeObject(obj); |
|
return result; |
|
} |
|
catch (Exception e) |
|
{ |
|
return obj.ToString(); |
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
/// 生成对象签名(Null对象为时间戳) |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
/// <returns></returns> |
|
public static string GenerateSign(this object obj) |
|
{ |
|
if (null == obj) |
|
{ |
|
return Helper.Common.GenerateMd5Hash(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff")); |
|
} |
|
else |
|
{ |
|
var str = $"{DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff")}-{obj.GetHashCode()}-{Helper.Common.AesKey}"; |
|
return Helper.Common.GenerateMd5Hash(str); |
|
} |
|
} |
|
|
|
|
|
|
|
// public static string ConvertNumberToString(this ob value) |
|
// { |
|
// return ""; |
|
// } |
|
} |