Explorar el Código

新增 XML序列化反序列化扩展方法

Shun hace 2 años
padre
commit
d757442aa6

+ 2 - 2
src/YSAI.Core/YSAI.Core.csproj

@@ -3,7 +3,7 @@
     <TargetFrameworks>net6.0;net8.0</TargetFrameworks>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
-    <Version>23.327.10601</Version>
+    <Version>23.327.23613</Version>
     <PackageOutputPath Condition="'$(Configuration)' == 'Release'">../YSAI.Publish/Release</PackageOutputPath>
     <PackageOutputPath Condition="'$(Configuration)' == 'Debug'">../YSAI.Publish/Debug</PackageOutputPath>
     <Authors>Shun</Authors>
@@ -19,6 +19,6 @@
     <PackageReference Include="Microsoft.ClearScript" Version="7.4.4" />
     <PackageReference Include="System.IO.Ports" Version="8.0.0" />
     <PackageReference Include="YSAI.Log" Version="23.319.17368" />
-    <PackageReference Include="YSAI.Unility" Version="23.319.17369" />
+    <PackageReference Include="YSAI.Unility" Version="23.327.22968" />
   </ItemGroup>
 </Project>

+ 6 - 4
src/YSAI.Redis/RedisOperate.cs

@@ -1454,13 +1454,15 @@ namespace YSAI.Redis
         /// </summary>
         /// <param name="key">键(带*号支持模糊查询批量删除)</param>
         /// <returns>返回结果(true:表示成功)</returns>
-        public async Task<bool> KeyDelete(string key)
+        public bool KeyDelete(string key)
         {
+            key = basics.UseTAG ? GTAG(key) : key;
+
             if (GetStatus().State)
             {
                 if (key.Contains("*"))
                 {
-                    RedisResult redisResult = await FuzzyQuery(key);
+                    RedisResult redisResult = FuzzyQuery(key).Result;
                     if (!redisResult.IsNull)
                     {
                         return KeyDelete((string[])redisResult).Equals(-1) ? false : true;
@@ -1469,7 +1471,7 @@ namespace YSAI.Redis
                 }
                 else
                 {
-                    return db.KeyDelete(basics.UseTAG ? GTAG(key) : key);
+                    return db.KeyDelete(key);
                 }
             }
             else
@@ -1718,7 +1720,7 @@ namespace YSAI.Redis
         {
             return db.ScriptEvaluateAsync(LuaScript.Prepare(
                 " local res = redis.call('KEYS', @keypattern) " +
-                " return res "), new { @keypattern = basics.UseTAG ? GTAG(key) : key });
+                " return res "), new { @keypattern = key });
         }
     }
 }

+ 67 - 25
src/YSAI.Test.All/Program.cs

@@ -1,41 +1,83 @@
-using System.Text;
-using YSAI.Core.communication.serial;
-using YSAI.Core.data;
+using YSAI.Redis;
 using YSAI.Unility;
 
-SerialOperate serialOperate = SerialOperate.Instance(new SerialData.Basics
+RedisOperate redisOperate = RedisOperate.Instance(new RedisData.Basics
 {
-    BaudRate = 9600,
-    DataBit = 8,
-    ParityBit = System.IO.Ports.Parity.None,
-    PortName = "COM2",
-    StopBit = System.IO.Ports.StopBits.One
+    CStr = "127.0.0.1:6379",
+    DBI = 0,
+    Expiry = 86400000,
+    TAG = "Shun:",
+    UseTAG = true,
 });
+Console.WriteLine(redisOperate.On().ToJson().JsonFormatting());
 
-byte[] bytes = new byte[] { };
-
-OperateResult operateResult = serialOperate.On();
-if (operateResult.State)
-{
-    Console.WriteLine(operateResult.ToJson().JsonFormatting());
-    serialOperate.OnEvent += SerialOperate_OnEvent;
-}
-while (true)
+for (int i = 0; i < 10; i++)
 {
-    Console.ReadLine();
-    Console.WriteLine(Encoding.Default.GetString(bytes));
-    bytes = new byte[] { };
+    Console.WriteLine(i);
+    Console.WriteLine(redisOperate.StringSet("A1", new data().ToJson()));
+    Console.WriteLine(redisOperate.StringGet("A1"));
 }
 
-void SerialOperate_OnEvent(object? sender, EventResult e)
+Console.WriteLine(redisOperate.KeyDelete("*"));
+
+Console.WriteLine(redisOperate.Off().ToJson().JsonFormatting());
+
+
+public class data
 {
-    byte[] array = e.GetRData<byte[]>();
-    Console.WriteLine(ByteTool.HexToStr(array).ToUpper());
-    bytes = ByteTool.CombineBytes(bytes, 0, bytes.Length, array, 0, array.Length);
+    public double a { get; set; } = new Random().NextDouble();
+    public double b { get; set; } = new Random().NextDouble();
+    public double c { get; set; } = new Random().NextDouble();
+    public double d { get; set; } = new Random().NextDouble();
+    public double e { get; set; } = new Random().NextDouble();
+    public double f { get; set; } = new Random().NextDouble();
+    public double g { get; set; } = new Random().NextDouble();
 }
 
 
 
+
+
+
+
+//using System.Text;
+//using YSAI.Core.communication.serial;
+//using YSAI.Core.data;
+//using YSAI.Unility;
+
+//SerialOperate serialOperate = SerialOperate.Instance(new SerialData.Basics
+//{
+//    BaudRate = 9600,
+//    DataBit = 8,
+//    ParityBit = System.IO.Ports.Parity.None,
+//    PortName = "COM2",
+//    StopBit = System.IO.Ports.StopBits.One
+//});
+
+//byte[] bytes = new byte[] { };
+
+//OperateResult operateResult = serialOperate.On();
+//if (operateResult.State)
+//{
+//    Console.WriteLine(operateResult.ToJson().JsonFormatting());
+//    serialOperate.OnEvent += SerialOperate_OnEvent;
+//}
+//while (true)
+//{
+//    Console.ReadLine();
+//    Console.WriteLine(Encoding.Default.GetString(bytes));
+//    bytes = new byte[] { };
+//}
+
+//void SerialOperate_OnEvent(object? sender, EventResult e)
+//{
+//    byte[] array = e.GetRData<byte[]>();
+//    Console.WriteLine(ByteTool.HexToStr(array).ToUpper());
+//    bytes = ByteTool.CombineBytes(bytes, 0, bytes.Length, array, 0, array.Length);
+//}
+
+
+
 //using YSAI.Core.communication.net.ws.client;
 //using YSAI.Core.communication.net.ws.service;
 //using YSAI.Unility;

+ 1 - 0
src/YSAI.Test.All/YSAI.Test.All.csproj

@@ -14,6 +14,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\YSAI.Opc\YSAI.Opc.csproj" />
+    <ProjectReference Include="..\YSAI.Redis\YSAI.Redis.csproj" />
   </ItemGroup>
 
 

+ 87 - 5
src/YSAI.Unility/ExtensionTool.cs

@@ -5,6 +5,7 @@ using System.Net;
 using System.Security.Cryptography;
 using System.Text;
 using System.Text.RegularExpressions;
+using System.Xml.Serialization;
 using YSAI.Unility.objectsComparer;
 
 namespace YSAI.Unility
@@ -1162,16 +1163,97 @@ namespace YSAI.Unility
             return null;
         }
 
-        public static string ToJson(this object obj)
+
+
+
+        /// <summary>
+        /// 转换JSON
+        /// </summary>
+        /// <param name="obj">对象</param>
+        /// <returns></returns>
+        public static string? ToJson(this object obj)
         {
             return JsonConvert.SerializeObject(obj);
         }
-
-        public static T JsonToObject<T>(this string json)
+        /// <summary>
+        /// JSON转实体
+        /// </summary>
+        /// <typeparam name="T">对象</typeparam>
+        /// <param name="json">Json字符串</param>
+        /// <returns></returns>
+        public static T? ToJsonEntity<T>(this string json)
         {
             return JsonConvert.DeserializeObject<T>(json);
         }
 
+
+        /// <summary>  
+        /// 实体对象序列化成xml字符串  
+        /// </summary>  
+        /// <typeparam name="T">对象</typeparam>  
+        /// <param name="obj">对象</param>  
+        /// <returns>XM字符串</returns>  
+        public static string? ToXml<T>(T obj)
+        {
+            if (obj is null)
+            {
+                return null;
+            }
+            using (MemoryStream Stream = new MemoryStream())
+            {
+                XmlSerializer xml = new XmlSerializer(obj.GetType());
+                xml.Serialize(Stream, obj);
+                Stream.Position = 0;
+                StreamReader sr = new StreamReader(Stream);
+                return sr.ReadToEnd();
+            }
+        }
+
+        /// <summary>  
+        /// 反序列化xml字符为对象,默认为Utf-8编码  
+        /// </summary>  
+        /// <typeparam name="T">对象</typeparam>  
+        /// <param name="xml">xml 字符串</param>  
+        /// <returns></returns>  
+        public static T? ToXmlEntity<T>(this string xml)
+        {
+            return ToXmlEntity<T>(xml, Encoding.UTF8);
+        }
+
+        /// <summary>  
+        /// 反序列化xml字符为对象  
+        /// </summary>  
+        /// <typeparam name="T">对象</typeparam>  
+        /// <param name="xml">xml字符串</param>  
+        /// <param name="encoding">编码格式</param>  
+        /// <returns></returns>  
+        public static T? ToXmlEntity<T>(this string xml, Encoding encoding)
+        {
+            try
+            {
+                var mySerializer = new XmlSerializer(typeof(T));
+                using (var ms = new MemoryStream(encoding.GetBytes(xml)))
+                {
+                    using (var sr = new StreamReader(ms, encoding))
+                    {
+                        return (T?)mySerializer.Deserialize(sr);
+                    }
+                }
+            }
+            catch
+            {
+                return default(T);
+            }
+
+        }
+
+
+
+        /// <summary>
+        /// 是不是为空
+        /// </summary>
+        /// <param name="value">字符串</param>
+        /// <returns></returns>
         public static bool IsEmpty(this string value)
         {
             return string.IsNullOrWhiteSpace(value);
@@ -1446,13 +1528,13 @@ namespace YSAI.Unility
             JsonSerializer serializer = new JsonSerializer();
             TextReader tr = new StringReader(str);
             JsonTextReader jtr = new JsonTextReader(tr);
-            object obj = serializer.Deserialize(jtr);
+            object? obj = serializer.Deserialize(jtr);
             if (obj != null)
             {
                 StringWriter textWriter = new StringWriter();
                 JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
                 {
-                    Formatting = Formatting.Indented,
+                    Formatting = Newtonsoft.Json.Formatting.Indented,
                     Indentation = 4,
                     IndentChar = ' '
                 };

+ 1 - 1
src/YSAI.Unility/YSAI.Unility.csproj

@@ -3,7 +3,7 @@
     <TargetFrameworks>net6.0;net8.0</TargetFrameworks>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
-    <Version>23.319.17369</Version>
+    <Version>23.327.22968</Version>
     <PackageOutputPath Condition="'$(Configuration)' == 'Release'">../YSAI.Publish/Release</PackageOutputPath>
     <PackageOutputPath Condition="'$(Configuration)' == 'Debug'">../YSAI.Publish/Debug</PackageOutputPath>
     <Authors>Shun</Authors>

+ 1 - 1
src/YSAI.VT/Program.cs

@@ -15,7 +15,7 @@ namespace YSAI.VT
             List<string> strings = new List<string>
             {
 #if RELEASE
-                //"YSAI.Core",
+                "YSAI.Core",
                 //"YSAI.Log",
                 //"YSAI.Unility",
                 //"YSAI.AllenBradley",