From 97dcf0e49bb084dcd59a4727288bab7df7adb525 Mon Sep 17 00:00:00 2001 From: nsnail Date: Tue, 22 Nov 2022 19:46:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BBnewtonsoft=20json=20=E8=87=B3?= =?UTF-8?q?=20system.text.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NSExt/Extensions/ObjectExtensions.cs | 27 +--- src/NSExt/Extensions/StringExtensions.cs | 182 +++++++++++------------ src/NSExt/Extensions/TypeExtensions.cs | 19 +++ src/NSExt/GlobalUsings.cs | 4 +- src/NSExt/NSExt.csproj | 1 - 5 files changed, 112 insertions(+), 121 deletions(-) create mode 100644 src/NSExt/Extensions/TypeExtensions.cs diff --git a/src/NSExt/Extensions/ObjectExtensions.cs b/src/NSExt/Extensions/ObjectExtensions.cs index ca9f2b5..fa7c23f 100644 --- a/src/NSExt/Extensions/ObjectExtensions.cs +++ b/src/NSExt/Extensions/ObjectExtensions.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Serialization; +using System.Text.Json; namespace NSExt.Extensions; @@ -12,25 +12,10 @@ public static class ObjectExtensions /// json文本 public static string Json(this object me, bool format = false) { - return JsonConvert.SerializeObject(me, format ? Formatting.Indented : Formatting.None); - } - - - /// - /// 将一个对象序列化成json文本(小驼峰属性名) - /// - /// 指定对象 - /// 是否格式化 - /// json文本 - public static string JsonCamelCase(this object me, bool format = false) - { - return JsonConvert.SerializeObject(me, - new JsonSerializerSettings { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - Formatting = format ? Formatting.Indented : Formatting.None - }); + return JsonSerializer.Serialize(me, + new JsonSerializerOptions { + WriteIndented = format, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }); } } - - - diff --git a/src/NSExt/Extensions/StringExtensions.cs b/src/NSExt/Extensions/StringExtensions.cs index 20b2ba4..132695c 100644 --- a/src/NSExt/Extensions/StringExtensions.cs +++ b/src/NSExt/Extensions/StringExtensions.cs @@ -2,24 +2,57 @@ using System.Security.Cryptography; +using System.Text.Json; namespace NSExt.Extensions; public static class StringExtensions { /// - /// MD5 hmac编码 + /// aes加密 /// - /// 字符串 + /// 要加密的串 /// 密钥 - /// 字符串使用的编码 - /// hash摘要的16进制文本形式(无连字符小写) - private static string Md5Hmac(this string me, string key, Encoding e) + /// 指定要用于加密的块密码模式。 + /// 指定在消息数据块短于加密操作所需的完整字节数时要应用的填充类型。 + /// + public static string Aes(this string me, + string key, + CipherMode cipherMode = CipherMode.ECB, + PaddingMode paddingMode = PaddingMode.PKCS7) { - using var md5Hmac = new HMACMD5(e.GetBytes(key)); - return BitConverter.ToString(md5Hmac.ComputeHash(e.GetBytes(me))) - .Replace("-", string.Empty) - .ToLower(CultureInfo.CurrentCulture); + using var aes = System.Security.Cryptography.Aes.Create(); + aes.Padding = PaddingMode.PKCS7; + aes.Mode = CipherMode.ECB; + aes.Key = key.Hex(); + using var encryptor = aes.CreateEncryptor(); + var bytes = me.Hex(); + var decrypted = encryptor.TransformFinalBlock(bytes, 0, bytes.Length); + return decrypted.Base64(); + } + + + /// + /// aes解密 + /// + /// 要加密的串 + /// 密钥 + /// 指定要用于加密的块密码模式。 + /// 指定在消息数据块短于加密操作所需的完整字节数时要应用的填充类型。 + /// + public static string AesDe(this string me, + string key, + CipherMode cipherMode = CipherMode.ECB, + PaddingMode paddingMode = PaddingMode.PKCS7) + { + using var aes = System.Security.Cryptography.Aes.Create(); + aes.Padding = PaddingMode.PKCS7; + aes.Mode = CipherMode.ECB; + aes.Key = key.Hex(); + using var encryptor = aes.CreateDecryptor(); + var bytes = me.Base64De(); + var decrypted = encryptor.TransformFinalBlock(bytes, 0, bytes.Length); + return decrypted.HexDe(); } /// @@ -143,6 +176,17 @@ public static class StringExtensions return !decimal.TryParse(me, out var ret) ? def : ret; } + + /// + /// string to double + /// + /// string + /// Int32 + public static double Double(this string me) + { + return double.Parse(me, CultureInfo.CurrentCulture); + } + /// /// 将字符串转换成枚举对象 /// @@ -167,6 +211,16 @@ public static class StringExtensions return !System.Enum.TryParse(typeof(T), name, out var ret) ? def : (T)ret; } + /// + /// string to float + /// + /// string + /// Int32 + public static float Float(this string me) + { + return float.Parse(me, CultureInfo.CurrentCulture); + } + /// /// 将字符串转为guid @@ -248,27 +302,6 @@ public static class StringExtensions return int.Parse(me, CultureInfo.CurrentCulture); } - - /// - /// string to double - /// - /// string - /// Int32 - public static double Double(this string me) - { - return double.Parse(me, CultureInfo.CurrentCulture); - } - - /// - /// string to float - /// - /// string - /// Int32 - public static float Float(this string me) - { - return float.Parse(me, CultureInfo.CurrentCulture); - } - /// /// 尝试将字符串转为int32 /// @@ -332,16 +365,6 @@ public static class StringExtensions } - /// - /// 将一个json字符串反序列化成为jObject对象 - /// - /// 字符串 - /// - public static JObject JObject(this string me) - { - return Newtonsoft.Json.Linq.JObject.Parse(me); - } - /// /// 中文姓名打马赛克 /// @@ -408,7 +431,7 @@ public static class StringExtensions /// 反序列化后生成的对象 public static T Object(this string me) { - return JsonConvert.DeserializeObject(me); + return JsonSerializer.Deserialize(me); } @@ -420,7 +443,7 @@ public static class StringExtensions /// 反序列化后生成的对象 public static object Object(this string me, Type type) { - return JsonConvert.DeserializeObject(me, type); + return JsonSerializer.Deserialize(me, type); } @@ -470,6 +493,17 @@ public static class StringExtensions } + /// + /// 蛇形命名 + /// + /// + /// + public static string Snakecase(this string me) + { + return Regex.Replace(me, "([A-Z])", "-$1").ToLower().TrimStart('-'); + } + + /// /// 截取指定长度的字符串,代替substring /// @@ -516,62 +550,18 @@ public static class StringExtensions return Uri.UnescapeDataString(me); } - /// - /// 蛇形命名 + /// MD5 hmac编码 /// - /// - /// - public static string Snakecase(this string me) - { - return Regex.Replace(me, "([A-Z])", "-$1").ToLower().TrimStart('-'); - } - - - /// - /// aes加密 - /// - /// 要加密的串 + /// 字符串 /// 密钥 - /// 指定要用于加密的块密码模式。 - /// 指定在消息数据块短于加密操作所需的完整字节数时要应用的填充类型。 - /// - public static string Aes(this string me, - string key, - CipherMode cipherMode = CipherMode.ECB, - PaddingMode paddingMode = PaddingMode.PKCS7) + /// 字符串使用的编码 + /// hash摘要的16进制文本形式(无连字符小写) + private static string Md5Hmac(this string me, string key, Encoding e) { - using var aes = System.Security.Cryptography.Aes.Create(); - aes.Padding = PaddingMode.PKCS7; - aes.Mode = CipherMode.ECB; - aes.Key = key.Hex(); - using var encryptor = aes.CreateEncryptor(); - var bytes = me.Hex(); - var decrypted = encryptor.TransformFinalBlock(bytes, 0, bytes.Length); - return decrypted.Base64(); + using var md5Hmac = new HMACMD5(e.GetBytes(key)); + return BitConverter.ToString(md5Hmac.ComputeHash(e.GetBytes(me))) + .Replace("-", string.Empty) + .ToLower(CultureInfo.CurrentCulture); } - - - /// - /// aes解密 - /// - /// 要加密的串 - /// 密钥 - /// 指定要用于加密的块密码模式。 - /// 指定在消息数据块短于加密操作所需的完整字节数时要应用的填充类型。 - /// - public static string AesDe(this string me, - string key, - CipherMode cipherMode = CipherMode.ECB, - PaddingMode paddingMode = PaddingMode.PKCS7) - { - using var aes = System.Security.Cryptography.Aes.Create(); - aes.Padding = PaddingMode.PKCS7; - aes.Mode = CipherMode.ECB; - aes.Key = key.Hex(); - using var encryptor = aes.CreateDecryptor(); - var bytes = me.Base64De(); - var decrypted = encryptor.TransformFinalBlock(bytes, 0, bytes.Length); - return decrypted.HexDe(); - } -} \ No newline at end of file +} diff --git a/src/NSExt/Extensions/TypeExtensions.cs b/src/NSExt/Extensions/TypeExtensions.cs new file mode 100644 index 0000000..a0e43d9 --- /dev/null +++ b/src/NSExt/Extensions/TypeExtensions.cs @@ -0,0 +1,19 @@ +namespace NSExt.Extensions; + +public static class TypeExtensions +{ + /// + /// 搜索此成员的继承链以查找自定义属性,接口也会被搜索。 + /// + /// + /// + /// + public static IEnumerable GetCustomAttributesIncludingBaseInterfaces(this Type me) + { + var attributeType = typeof(T); + return me.GetCustomAttributes(attributeType, true) + .Union(me.GetInterfaces() + .SelectMany(interfaceType => interfaceType.GetCustomAttributes(attributeType, true))) + .Cast(); + } +} \ No newline at end of file diff --git a/src/NSExt/GlobalUsings.cs b/src/NSExt/GlobalUsings.cs index a354645..385788a 100644 --- a/src/NSExt/GlobalUsings.cs +++ b/src/NSExt/GlobalUsings.cs @@ -6,6 +6,4 @@ global using System.Globalization; global using System.Text; global using System.Text.RegularExpressions; global using System.Web; -global using Newtonsoft.Json; -global using Newtonsoft.Json.Linq; -global using System.ComponentModel; +global using System.ComponentModel; \ No newline at end of file diff --git a/src/NSExt/NSExt.csproj b/src/NSExt/NSExt.csproj index 153a8cc..1861754 100644 --- a/src/NSExt/NSExt.csproj +++ b/src/NSExt/NSExt.csproj @@ -9,7 +9,6 @@ -