将以往的代码复制到代码库
This commit is contained in:
149
Future.Contract/Extensions/FutureHelper.cs
Normal file
149
Future.Contract/Extensions/FutureHelper.cs
Normal file
@@ -0,0 +1,149 @@
|
||||
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
|
||||
{
|
||||
/// <summary>
|
||||
/// 通用扩展方法承载类型
|
||||
/// </summary>
|
||||
public static partial class FutureHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于构建扩展方法的执行环境
|
||||
/// </summary>
|
||||
static FutureHelper()
|
||||
{
|
||||
KnownTypes.Add(typeof(List<object>)); //JsonArray
|
||||
KnownTypes.Add(typeof(Dictionary<string, object>)); //JsonObject
|
||||
|
||||
//TODO:对象的序列化=>为序列化器装载可感知类型清单
|
||||
}
|
||||
/// <summary>
|
||||
/// 序列化器可感知类型清单
|
||||
/// </summary>
|
||||
private readonly static List<Type> KnownTypes = new List<Type>();
|
||||
/// <summary>
|
||||
/// 从流中读取一个Json格式表示的对象
|
||||
/// </summary>
|
||||
/// <typeparam name="T">要读取的对象的类型</typeparam>
|
||||
/// <param name="origin">存放数据的原始数据流</param>
|
||||
/// <returns>被读出的数据对象</returns>
|
||||
public static T Decode4Json<T>(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<T>(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);
|
||||
}
|
||||
/// <summary>
|
||||
/// 向流中以Json格式写入一个对象
|
||||
/// </summary>
|
||||
/// <param name="graph">要写入的源对象</param>
|
||||
/// <param name="target">准备写入的流</param>
|
||||
public static void Encode2Json(this object graph, System.IO.Stream target)
|
||||
{
|
||||
DataContractJsonSerializer mSerializer = new DataContractJsonSerializer(graph.GetType(), knownTypes: KnownTypes);
|
||||
mSerializer.WriteObject(target, graph);
|
||||
}
|
||||
/// <summary>
|
||||
/// 从Xaml文档中读取一个对象
|
||||
/// </summary>
|
||||
/// <typeparam name="T">要读取的对象类型</typeparam>
|
||||
/// <param name="xaml">存储对象的Xaml文档</param>
|
||||
/// <returns>被读取出的数据对象</returns>
|
||||
public static T Decode4Xaml<T>(this string xaml) => (T)XamlReader.Parse(xaml);
|
||||
/// <summary>
|
||||
/// 将一个对象编译成Xaml文档
|
||||
/// </summary>
|
||||
/// <param name="graph">要进行编译的源数据对象</param>
|
||||
/// <returns>编译完成的Xaml文档</returns>
|
||||
public static string Encode2Xaml(this object graph) => XamlWriter.Save(graph);
|
||||
/// <summary>
|
||||
/// 在确定目标类型的前提下,根据文本表示的值表达式获取真实的值对象
|
||||
/// </summary>
|
||||
/// <param name="type">目标类型枚举值</param>
|
||||
/// <param name="vExp">值表达式</param>
|
||||
/// <returns>如果值表达式有效则返回表达式代表的值,否则返回目标类型的默认值</returns>
|
||||
public static object Evaluate(this EParameterType type, string vExp)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取参数类型枚举的中文名称与简要说明
|
||||
/// </summary>
|
||||
/// <param name="type">预置参数类型</param>
|
||||
/// <returns>参数类型的描述字符串</returns>
|
||||
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 "未知类型:枚举值超界,出现未定义的类型!";
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取参数类型枚举的中文名称
|
||||
/// </summary>
|
||||
/// <param name="type">预置参数类型</param>
|
||||
/// <returns>参数类型的描述字符串</returns>
|
||||
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 "???类型";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user