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;
}
}
}