using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Reflection; using WCS.Entity.Protocol; namespace WCS_Client { /// /// 扩展.json序列反序列化 /// public static partial class JsonExtensions { /// /// 转成json对象 /// /// json字串 /// public static object ToJson(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject(Json); } /// /// 转成json字串 /// /// 对象 /// public static string ToJson(this object obj) { var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }; return JsonConvert.SerializeObject(obj, timeConverter); } /// /// 转成json字串 /// /// 对象 /// 时间格式化 /// public static string ToJson(this object obj, string datetimeformats) { var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats }; return JsonConvert.SerializeObject(obj, timeConverter); } /// /// 字串反序列化成指定对象实体 /// /// 实体类型 /// 字串 /// public static T ToObject(this string Json) { return Json == null ? default(T) : JsonConvert.DeserializeObject(Json); } /// /// 字串反序列化成指定对象实体(列表) /// /// 实体类型 /// 字串 /// public static List ToList(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject>(Json); } /// /// 字串反序列化成DataTable /// /// 字串 /// public static DataTable ToTable(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject(Json); } /// /// 字串反序列化成linq对象 /// /// 字串 /// public static JObject ToJObject(this string Json) { return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace(" ", "")); } public static DataTable GetAttributesDataTable(this SCData obj) { var tb = new DataTable(obj.GetType().Name); tb.Columns.Add("信号说明", typeof(string)); tb.Columns.Add("信号名称", typeof(string)); tb.Columns.Add("信号值", typeof(string)); foreach (PropertyInfo pi in obj.D521.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D521.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = pi.Name; var abc = pi.GetValue(obj.D521, null); switch (proname) { case "Alarm": describle = "警报"; break; case "Col_1": describle = "当前列"; break; case "Col_2": describle = "当前列"; break; case "DEVICE": describle = "设备"; break; case "ECol_1": describle = "目标列"; break; case "ECol_2": describle = "目标列"; break; case "EDepth_1": describle = "目标深度"; break; case "EDepth_2": describle = "目标深度"; break; case "ELayer_1": describle = "目标层"; break; case "ELayer_2": describle = "目标层"; break; case "ELine_1": describle = "目标行"; break; case "ELine_2": describle = "目标行"; break; case "ENALBLE": describle = "是否可用"; break; case "FRAME": describle = "时间"; break; case "FinishedTask_1": describle = "已完成任务号"; break; case "FinishedTask_2": describle = "已完成任务号"; break; case "ForkPos_1": describle = "Z轴位置 货叉"; break; case "ForkPos_2": describle = "Z轴位置 货叉"; break; case "ForkStatus_1": describle = "货叉状态"; break; case "ForkStatus_2": describle = "货叉状态"; break; case "GoodsType_1": describle = "货物类型"; break; case "GoodsType_2": describle = "货物类型"; break; case "ID": describle = ""; break; case "ISLAST": describle = ""; break; case "Layer_1": describle = "当前层"; break; case "Layer_2": describle = "当前层"; break; case "LiftPos_1": describle = "Y轴位置 提升"; break; case "LiftPos_2": describle = "Y轴位置 提升"; break; case "Line_1": describle = "当前行"; break; case "Line_2": describle = "当前行"; break; case "Mode_1": describle = "模式"; break; case "Mode_2": describle = "模式"; break; case "RES9_1": describle = "备用 PLCname=Start_number1"; break; case "RES9_2": describle = "备用 PLCname=Start_number2"; break; case "RES10_1": describle = "备用 PLCname=End_number1"; break; case "RES10_2": describle = "备用 PLCname=End_number2"; break; case "RES11_1": describle = "备用"; break; case "RES11_2": describle = "备用"; break; case "RES12_1": describle = "备用"; break; case "RES12_2": describle = "备用"; break; case "RES13_1": describle = "备用"; break; case "RES13_2": describle = "备用"; break; case "RES14_1": describle = "备用"; break; case "RES14_2": describle = "备用"; break; case "RunTime": describle = "运行时间"; break; case "RunTime_1": describle = "运行时长"; break; case "RunTime_2": describle = "运行时长"; break; case "SCol_1": describle = "起始列"; break; case "SCol_2": describle = "起始列"; break; case "SDepth_1": describle = "起始深度"; break; case "SDepth_2": describle = "起始深度"; break; case "SLayer_1": describle = "起始层"; break; case "SLayer_2": describle = "起始层"; break; case "SLine_1": describle = "起始行"; break; case "SLine_2": describle = "起始行"; break; case "SRMMode": describle = "模式"; break; case "SRMStatus": describle = "状态"; break; case "Status_1": describle = "2状态"; break; case "Status_2": describle = "1状态"; break; case "TaskID_1": describle = "任务号"; break; case "TaskID_2": describle = "任务号"; break; case "TotalKM_1": describle = "总里程"; break; case "TotalKM_2": describle = "总里程"; break; case "TralelPos_1": describle = "X轴位置(0.1毫米) 行走"; break; case "TralelPos_2": describle = "X轴位置(0.1毫米) 行走"; break; case "UPDATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = "版本"; break; case "VoucherNo_1": describle = "触发信号"; break; case "VoucherNo_2": describle = "触发信号"; break; case "WCSVERSION": describle = "WCS版本"; break; } var values = new object[3]; values[0] = describle; values[1] = "DB521_" + proname; values[2] = abc; tb.Rows.Add(values); } foreach (PropertyInfo pi in obj.D520.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D520.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = pi.Name; var abc = pi.GetValue(obj.D520, null); switch (proname) { case "SLine_1": describle = "起始行"; break; case "SLine_2": describle = "起始行"; break; case "SCol_1": describle = "起始列"; break; case "SCol_2": describle = "起始列"; break; case "SLayer_1": describle = "起始层"; break; case "SLayer_2": describle = "起始层"; break; case "SDepth_1": describle = "起始深度"; break; case "SDepth_2": describle = "起始深度"; break; case "Col_1": describle = "当前列"; break; case "Col_2": describle = "当前列"; break; case "ELine_1": describle = "目标行"; break; case "ELine_2": describle = "目标行"; break; case "ECol_1": describle = "目标列"; break; case "ECol_2": describle = "目标列"; break; case "ELayer_1": describle = "目标层"; break; case "ELayer_2": describle = "目标层"; break; case "EDepth_1": describle = "目标深度"; break; case "EDepth_2": describle = "目标深度"; break; case "DEVICE": describle = "设备"; break; case "ENALBLE": describle = "是否可用"; break; case "FRAME": describle = "时间"; break; case "FinishedACK_1": describle = "完成任务触发"; break; case "FinishedACK_2": describle = "完成任务触发"; break; case "GoodsType_1": describle = "货物类型"; break; case "GoodsType_2": describle = "货物类型"; break; case "Handshake_1": describle = "WCS心跳信号"; break; case "Handshake_2": describle = "WCS心跳信号"; break; case "ID": describle = "ID"; break; case "ISLAST": describle = ""; break; case "RES1_1": describle = "货物数量"; break; case "RES1_2": describle = "货物数量"; break; case "RES2_1": describle = "备用"; break; case "RES2_2": describle = "备用"; break; case "RES3_1": describle = "备用"; break; case "RES3_2": describle = "备用"; break; case "RES4_1": describle = "备用"; break; case "RES4_2": describle = "备用"; break; case "SCSpeedMode_1": describle = "行驶速度"; break; case "SCSpeedMode_2": describle = "行驶速度"; break; case "TaskID_1": describle = "任务号"; break; case "TaskID_2": describle = "任务号"; break; case "UPDATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = "版本"; break; case "VoucherNo_1": describle = "触发信号"; break; case "VoucherNo_2": describle = "触发信号"; break; case "WCSVERSION": describle = "WCS版本"; break; } var values = new object[3]; values[0] = describle; values[1] = "DB520_" + proname; values[2] = abc; tb.Rows.Add(values); } foreach (PropertyInfo pi in obj.D537.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D537.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = "DB537_" + pi.Name; var abc = pi.GetValue(obj.D537, null); switch (pi.Name) { case "DEVICE": describle = "设备"; break; case "ENALBLE": describle = "是否可用"; break; case "FRAME": describle = "时间"; break; case "ID": describle = "ID"; break; case "ISLAST": describle = ""; break; case "SCAlarm": describle = "警报"; break; case "UPDATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = "版本"; break; case "WCSVERSION": describle = "WCS版本"; break; } var values = new object[3]; values[0] = describle; values[1] = proname; values[2] = abc; tb.Rows.Add(values); } //属性遍历 return tb; } public static DataTable GetAttributesDataTable(this StationData obj) { var tb = new DataTable(obj.GetType().Name); tb.Columns.Add("信号说明", typeof(string)); tb.Columns.Add("信号名称", typeof(string)); tb.Columns.Add("信号值", typeof(string)); foreach (PropertyInfo pi in obj.D521.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D521.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = pi.Name; var abc = pi.GetValue(obj.D521, null); switch (proname) { case "Tasknum": describle = "任务号"; break; case "CmdType": describle = "命令类型"; break; case "DEVICE": describle = "设备"; break; case "ENABLED": describle = ""; break; case "FRAME": describle = ""; break; case "GoodsSize": describle = "货物高度"; break; case "Goodscode": describle = "货物数条码"; break; case "Goodsend": describle = "目标地址"; break; case "Goodsnum": describle = "货物数量(1.两个位置放1个货物,2.两个位置放2个货物)"; break; case "Goodsstart": describle = "起始地址"; break; case "ID": describle = ""; break; case "ISLAST": describle = ""; break; case "Request": describle = "请求"; break; case "Status": describle = "输送机状态"; break; case "UPTATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = ""; break; case "VoucherNo": describle = "凭证号 每次累加"; break; case "WCSVERSION": describle = "WCS版本"; break; } var values = new object[3]; values[0] = describle; values[1] = "DB521_" + proname; values[2] = abc; tb.Rows.Add(values); } foreach (PropertyInfo pi in obj.D520.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D520.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = pi.Name; var abc = pi.GetValue(obj.D520, null); switch (proname) { case "Tasknum": describle = "任务号"; break; case "CmdType": describle = "命令类型"; break; case "DEVICE": describle = "设备"; break; case "ENABLED": describle = ""; break; case "FRAME": describle = ""; break; case "GoodsSize": describle = "货物高度"; break; case "Goodscode": describle = "货物数条码"; break; case "Goodsend": describle = "目标地址"; break; case "Goodsnum": describle = "货物数量(1.两个位置放1个货物,2.两个位置放2个货物)"; break; case "Goodsstart": describle = "起始地址"; break; case "ID": describle = ""; break; case "ISLAST": describle = ""; break; case "Request": describle = "请求"; break; case "Istation521Status": describle = "输送机状态"; break; case "UPTATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = ""; break; case "VoucherNo": describle = "凭证号 每次累加"; break; case "WCSVERSION": describle = "WCS版本"; break; } var values = new object[3]; values[0] = describle; values[1] = "DB520_" + proname; values[2] = abc; tb.Rows.Add(values); } foreach (PropertyInfo pi in obj.D523.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D523.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = "DB523_" + pi.Name; var abc = pi.GetValue(obj.D523, null); switch (pi.Name) { case "Alarm": describle = "警报"; break; case "DEVICE": describle = "设备"; break; case "ENABLED": describle = "是否可用"; break; case "FRAME": describle = "时间"; break; case "ID": describle = "编码"; break; case "ISLAST": describle = ""; break; case "RES": describle = "备用"; break; case "RunTime": describle = "运行时间"; break; case "Status": describle = "输送机状态"; break; case "UPDATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = "版本"; break; case "WCSVERSION": describle = "WCS版本"; break; } var values = new object[3]; values[0] = describle; values[1] = proname; values[2] = abc; tb.Rows.Add(values); } //属性遍历 return tb; } public static DataTable GetAttributesDataTable(this RGVData obj) { var tb = new DataTable(obj.GetType().Name); tb.Columns.Add("信号说明", typeof(string)); tb.Columns.Add("信号名称", typeof(string)); tb.Columns.Add("信号值", typeof(string)); foreach (PropertyInfo pi in obj.D521.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D521.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = pi.Name; var abc = pi.GetValue(obj.D521, null); switch (proname) { case "DEVICE": describle = "设备"; break; case "DestPosition_1": describle = "目标站台"; break; case "DestPosition_2": describle = "目标站台"; break; case "ENALBLE": describle = "是否可用"; break; case "FRAME": describle = "时间"; break; case "ID": describle = "ID"; break; case "ISLAST": describle = ""; break; case "Mileage": describle = "里程"; break; case "PRIORITY_1": describle = "优先级"; break; case "PRIORITY_2": describle = "优先级"; break; case "Position": describle = "位置"; break; case "RES1_1": describle = "备用"; break; case "RES1_2": describle = "备用"; break; case "RES2_1": describle = "备用"; break; case "RES2_2": describle = "备用"; break; case "RES_6": describle = "备用"; break; case "RunTime": describle = "运行时间"; break; case "StartPosition_1": describle = "起始站台"; break; case "StartPosition_2": describle = "起始站台"; break; case "Status_1": describle = "RGV运行状态"; break; case "Status_2": describle = "RGV运行状态"; break; case "SystemStatus": describle = "系统状态"; break; case "TaskID_1": describle = "任务号"; break; case "TaskID_2": describle = "任务号"; break; case "TaskType_1": describle = "任务类型"; break; case "TaskType_2": describle = "任务类型"; break; case "Trigger_1": describle = "触发信号"; break; case "Trigger_2": describle = "触发信号"; break; case "UPDATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = "版本"; break; case "WCSVERSION": describle = "WCS版本"; break; case "WorkMode": describle = "RGV运行模式"; break; } var values = new object[3]; values[0] = describle; values[1] = "DB521_" + proname; values[2] = abc; tb.Rows.Add(values); } foreach (PropertyInfo pi in obj.D520.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D520.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = pi.Name; var abc = pi.GetValue(obj.D520, null); switch (proname) { case "DEVICE": describle = "设备"; break; case "DestPosition_1": describle = "目标站台"; break; case "DestPosition_2": describle = "目标站台"; break; case "ENALBLE": describle = "是否可用"; break; case "FRAME": describle = "时间"; break; case "ID": describle = "ID"; break; case "ISLAST": describle = ""; break; case "PRIORITY_1": describle = "优先级"; break; case "PRIORITY_2": describle = "优先级"; break; case "Position": describle = "位置"; break; case "RES1_1": describle = "备用"; break; case "RES1_2": describle = "备用"; break; case "RES2_1": describle = "备用"; break; case "RES2_2": describle = "备用"; break; case "StartPosition_1": describle = "起始地址,环穿RGV无起始地址,只有目标地址"; break; case "StartPosition_2": describle = "起始地址,环穿RGV无起始地址,只有目标地址"; break; case "TaskID_1": describle = "任务号"; break; case "TaskID_2": describle = "任务号"; break; case "TaskType_1": describle = "任务类型"; break; case "TaskType_2": describle = "任务类型"; break; case "Trigger_1": describle = "触发信号"; break; case "Trigger_2": describle = "触发信号"; break; case "UPDATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = "版本"; break; case "WCSVERSION": describle = "WCS版本"; break; } var values = new object[3]; values[0] = describle; values[1] = "DB520_" + proname; values[2] = abc; tb.Rows.Add(values); } foreach (PropertyInfo pi in obj.D523.GetType().GetProperties()) { AttributeCollection attributes = TypeDescriptor.GetProperties(obj.D523.GetType())[pi.Name].Attributes; DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)]; string describle = myAttribute.Description; string proname = "DB523_" + pi.Name; var abc = pi.GetValue(obj.D523, null); switch (pi.Name) { case "DEVICE": describle = "设备"; break; case "ENALBLE": describle = "是否可用"; break; case "FRAME": describle = "时间"; break; case "Fault": describle = "RGV故障"; break; case "Fault_1": describle = "RGV1工位故障"; break; case "Fault_2": describle = "RGV2工位故障"; break; case "ISLAST": describle = ""; break; case "Status": describle = "环穿状态"; break; case "Status_1": describle = "1工位状态"; break; case "Status_2": describle = "2工位状态"; break; case "ID": describle = "ID"; break; case "UPDATETIME": describle = "更新时间"; break; case "UPDATEUSER": describle = "更新用户"; break; case "VER": describle = "版本"; break; case "WCSVERSION": describle = "WCS版本"; break; } var values = new object[3]; values[0] = describle; values[1] = proname; values[2] = abc; tb.Rows.Add(values); } //属性遍历 return tb; } } }