diff --git a/Convention/[RScript] b/Convention/[RScript] index 52e8e85..d3e21ca 160000 --- a/Convention/[RScript] +++ b/Convention/[RScript] @@ -1 +1 @@ -Subproject commit 52e8e855429c99ee7d5444cfcfa6434b2b657a97 +Subproject commit d3e21cad156f61ba46a61ec2008231de49ef946b diff --git a/Convention/[Runtime]/Config.cs b/Convention/[Runtime]/Config.cs index ec3d497..7189a84 100644 --- a/Convention/[Runtime]/Config.cs +++ b/Convention/[Runtime]/Config.cs @@ -1,12 +1,13 @@ using System; +using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; -using System.Text; +using System.Runtime.Serialization; using System.Threading; -using System.Threading.Tasks; +using System.Xml; namespace Convention { @@ -79,6 +80,39 @@ namespace Convention } + /// + /// 序列化 + /// + /// + /// + public static byte[] Serialize(T obj) + { + ArgumentNullException.ThrowIfNull(obj); + + using var memoryStream = new MemoryStream(); + DataContractSerializer ser = new DataContractSerializer(typeof(T)); + ser.WriteObject(memoryStream, obj); + var data = memoryStream.ToArray(); + return data; + } + + /// + /// 反序列化 + /// + /// + /// + /// + public static T Deserialize(byte[] data) + { + ArgumentNullException.ThrowIfNull(data); + + using var memoryStream = new MemoryStream(data); + XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(memoryStream, new XmlDictionaryReaderQuotas()); + DataContractSerializer ser = new DataContractSerializer(typeof(T)); + var result = (T)ser.ReadObject(reader, true); + return result; + } + public static object SeekValue(object obj, string name, BindingFlags flags, out bool isSucceed) { Type type = obj.GetType(); @@ -409,5 +443,25 @@ namespace Convention { return DateTime.Now.ToString(format); } + + public class EnumerableClass : IEnumerable + { + private readonly IEnumerator ir; + + public EnumerableClass(IEnumerator ir) + { + this.ir = ir; + } + + public IEnumerator GetEnumerator() + { + return ir; + } + } + + public static IEnumerable AsEnumerable(this IEnumerator ir) + { + return new EnumerableClass(ir); + } } } diff --git a/[Test]/Program.cs b/[Test]/Program.cs index e954a29..164b851 100644 --- a/[Test]/Program.cs +++ b/[Test]/Program.cs @@ -1,5 +1,8 @@ -using Convention.RScript; +using Convention; +using Convention.EasySave; +using Convention.RScript; using System; +using System.IO; public class Program { @@ -21,7 +24,9 @@ public class Program typeof(ExpressionMath), typeof(Test) }; - var result = engine.Run(@" + + /* + var result = engine.Compile(@" int i= 2; int count = 0; label(test); @@ -44,6 +49,8 @@ namespace(func1) label(end); ", import); - Console.WriteLine($"Script executed successfully. Result: {result["i"].data}"); + */ + //EasySave.Save("data", result, "F:\\test.json"); + var result = engine.Run(EasySave.Load("data", "F:\\test.json"), import); } } \ No newline at end of file