using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Json; using System.Windows.Markup; using System.Reflection; using System.Runtime.CompilerServices; using System.IO; using System.Windows.Controls; using System.Diagnostics.Eventing.Reader; using System.Windows.Media; using System.Windows; using System.Windows.Controls.Primitives; using Shapes = System.Windows.Shapes; using System.Xml.Linq; namespace Future.Contract { /// /// 通用扩展方法承载类型 /// public static partial class FutureHelper { /// /// 用于构建扩展方法的执行环境 /// static FutureHelper() { KnownTypes.Add(typeof(List)); //JsonArray KnownTypes.Add(typeof(Dictionary)); //JsonObject //TODO:对象的序列化=>为序列化器装载可感知类型清单 } /// /// 序列化器可感知类型清单 /// private readonly static List KnownTypes = new List(); /// /// 从流中读取一个Json格式表示的对象 /// /// 要读取的对象的类型 /// 存放数据的原始数据流 /// 被读出的数据对象 public static T Decode4Json(this System.IO.Stream origin) { if (origin == null) return default(T); return (T)new DataContractJsonSerializer(typeof(T), knownTypes: KnownTypes).ReadObject(origin); } public static T Decode4Json(this string origin) { if (origin == null) return default(T); MemoryStream memoryStream = new MemoryStream(Encoding.Default.GetBytes(origin)); return (T)new DataContractJsonSerializer(typeof(T), knownTypes: KnownTypes).ReadObject(memoryStream); } /// /// 向流中以Json格式写入一个对象 /// /// 要写入的源对象 /// 准备写入的流 public static void Encode2Json(this object graph, System.IO.Stream target) { DataContractJsonSerializer mSerializer = new DataContractJsonSerializer(graph.GetType(), knownTypes: KnownTypes); mSerializer.WriteObject(target, graph); } /// /// 从Xaml文档中读取一个对象 /// /// 要读取的对象类型 /// 存储对象的Xaml文档 /// 被读取出的数据对象 public static T Decode4Xaml(this string xaml) => (T)XamlReader.Parse(xaml); /// /// 将一个对象编译成Xaml文档 /// /// 要进行编译的源数据对象 /// 编译完成的Xaml文档 public static string Encode2Xaml(this object graph) => XamlWriter.Save(graph); /// /// 在确定目标类型的前提下,根据文本表示的值表达式获取真实的值对象 /// /// 目标类型枚举值 /// 值表达式 /// 如果值表达式有效则返回表达式代表的值,否则返回目标类型的默认值 public static object Evaluate(this EParameterType type, string vExp) { throw new NotImplementedException(); } /// /// 获取参数类型枚举的中文名称与简要说明 /// /// 预置参数类型 /// 参数类型的描述字符串 public static string GetParameterTypeNameAndRemark(this EParameterType type) { switch (type) { case EParameterType.Boolean: return "布尔类型:真实值为 bool 类型;即,true/false"; case EParameterType.DateTime: { } return "时间日期:掩码格式为 yyyy-mm-dd HH:mm:ss"; case EParameterType.Enums: { } return "枚举类型:真实值为 Int 类型数值"; case EParameterType.Integer: { } return "整数类型:真实值为 Int 类型数值"; case EParameterType.Number: { } return "数值类型:真实值为 Double 类型数值"; case EParameterType.String: { } return "文本类型:真实值为 String 类型"; case EParameterType.RichText: { } return "富文本型:真实值为 String 类型"; case EParameterType.Variant: { } return "可变类型:真实值可以为 Json 支持的各种基本类型";//所有引擎需要的类型也是使用这个类型存储的 case EParameterType.IntArray: return "整数集合:真实值为 Int[] 类型"; case EParameterType.NumArray: return "数值集合:真实值为 Double[] 类型"; case EParameterType.TxtArray: return "文本集合:真实值为 String[] 类型"; case EParameterType.ValArray: { } return "变量集合:真实值为 Object[] 类型"; case EParameterType.Byte: return "字节类型:真实值为 Byte 类型"; case EParameterType.Word: return "单字类型:真实值为 Byte[2] 类型"; case EParameterType.DWord: return "双字类型:真实值为 Byte[4] 类型"; case EParameterType.LWord: return "长字类型:真实值为 Byte[8] 类型"; case EParameterType.ByteArray: return "字节数组:真实值为 Byte[?] 类型"; default: return "未知类型:枚举值超界,出现未定义的类型!"; } } /// /// 获取参数类型枚举的中文名称 /// /// 预置参数类型 /// 参数类型的描述字符串 public static string GetParameterTypeName(this EParameterType type) { switch (type) { case EParameterType.Boolean: return "布尔类型"; case EParameterType.DateTime: { } return "时间日期"; case EParameterType.Enums: { } return "枚举类型"; case EParameterType.Integer: { } return "整数类型"; case EParameterType.Number: { } return "数值类型"; case EParameterType.String: { } return "文本类型"; case EParameterType.RichText: { } return "富文本型"; case EParameterType.Variant: { } return "可变类型";//所有引擎需要的类型也是使用这个类型存储的 case EParameterType.IntArray: return "整数集合"; case EParameterType.NumArray: return "数值集合"; case EParameterType.TxtArray: return "文本集合"; case EParameterType.ValArray: { } return "变量集合"; case EParameterType.Byte: return "字节类型"; case EParameterType.Word: return "单字类型"; case EParameterType.DWord: return "双字类型"; case EParameterType.LWord: return "长字类型"; case EParameterType.ByteArray: return "字节数组"; default: return "???类型"; } } } }