Files
Future/Future.Contract/Extensions/FutureHelper.cs
2025-08-30 17:19:57 +08:00

150 lines
7.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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