using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading.Tasks; namespace VisionFrame.Base.Converter { public class NodeJsonConverter : JsonConverter { class TypeInfoTemp { public string TypeInfo { get; set; } } // 字符串到对象实例的转换过程 public override NodeModelBase? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { string json = reader.GetString();// 包含程序信息 TypeInfoTemp ti = System.Text.Json.JsonSerializer.Deserialize(json); string[] type_info = ti.TypeInfo.Split(";"); Assembly assembly = Assembly.GetEntryAssembly();// 取当前执行的程序集 if (assembly.GetName().Name != type_info[0]) { assembly = Assembly.LoadFile(Environment.CurrentDirectory + "/Activities/" + type_info[0] + ".dll"); } // 最终要执的节点Model Type type = assembly.GetType(type_info[1]); NodeModelBase node = (NodeModelBase)System.Text.Json.JsonSerializer.Deserialize(json, type); return node; } // 对象到Json字符串的转换过程 public override void Write(Utf8JsonWriter writer, NodeModelBase value, JsonSerializerOptions options) { // value--->Json // writer--写 // 准备类型的记录 string type = value.GetType().FullName; string assembly = value.GetType().Assembly.GetName().Name; value.TypeInfo = assembly + ";" + type; // 如果直接放value 会循环触发这个方法 // 用一个动态变量接收, dynamic temp = value; string json = System.Text.Json.JsonSerializer.Serialize(temp); writer.WriteStringValue(json); } } }