将以往的代码复制到代码库

This commit is contained in:
于智纯
2025-08-30 17:19:57 +08:00
parent da46e0242d
commit 20ea70bf64
198 changed files with 10075 additions and 0 deletions

View 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 "???类型";
}
}
}
}