From 56538e602b927c232ac5b991ef84175edd2ce3ce Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期五, 24 四月 2026 14:20:20 +0800
Subject: [PATCH] feat(WMS/WCS): 增加机器人历史信息记录 fix(WMS/WCS): 修复前端bug
---
Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs | 1980 ++++++++++++++++++++++++++++++------------------------------
1 files changed, 990 insertions(+), 990 deletions(-)
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs
index d71ebea..ebb357f 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs
@@ -1,998 +1,998 @@
-锘縰sing NetTaste;
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using System.Web;
-using WIDESEA_Core.Const;
-using WIDESEA_Core.Enums;
-
-namespace WIDESEA_Core.Helper
-{
- public static class UtilConvert
- {
- private static DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
-
- private static long longTime = 621355968000000000;
-
- private static int samllTime = 10000000;
- /// <summary>
- /// 鏃堕棿鎴宠浆鎹㈡垚鏃ユ湡
- /// </summary>
- /// <param name="timeStamp"></param>
- /// <returns></returns>
- public static DateTime GetTimeSpmpToDate(this object timeStamp)
- {
- if (timeStamp == null) return dateStart;
- DateTime dateTime = new DateTime(longTime + Convert.ToInt64(timeStamp) * samllTime, DateTimeKind.Utc).ToLocalTime();
- return dateTime;
- }
-
- public static string Serialize(this object obj, JsonSerializerSettings formatDate = null)
- {
- if (obj == null) return null;
- formatDate = formatDate ?? new JsonSerializerSettings
- {
- DateFormatString = "yyyy-MM-dd HH:mm:ss"
- };
- return JsonConvert.SerializeObject(obj, formatDate);
- }
-
- public static T DeserializeObject<T>(this string json)
- {
- if (string.IsNullOrEmpty(json))
- {
- return default(T);
- }
- if (json == "{}")
- {
- json = "[]";
- }
- return JsonConvert.DeserializeObject<T>(json);
- }
-
- public static string FirstLetterToLower(this string thisValue)
- {
- if (string.IsNullOrEmpty(thisValue)) return string.Empty;
- string result = thisValue.Substring(0, 1).ToLower() + thisValue.Substring(1, thisValue.Length - 1);
- return result;
- }
-
- public static string FirstLetterToUpper(this string thisValue)
- {
- if (string.IsNullOrEmpty(thisValue)) return string.Empty;
- string result = thisValue.Substring(0, 1).ToUpper() + thisValue.Substring(1, thisValue.Length - 1);
- return result;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static int ObjToInt(this object thisValue)
- {
- int reval = 0;
- if (thisValue == null) return 0;
- if (thisValue is Enum && thisValue != DBNull.Value && Enum.TryParse(thisValue.GetType(), thisValue.ToString(), out var val))
- {
- return Convert.ToInt32(val.ChangeType(typeof(int)));
- }
- if (thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return reval;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static int DoubleToInt(this double thisValue)
- {
- int reval = 0;
-
- return Convert.ToInt32(thisValue);
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <param name="errorValue"></param>
- /// <returns></returns>
- public static int ObjToInt(this object thisValue, int errorValue)
- {
- int reval = 0;
- if (thisValue != null && thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return errorValue;
- }
-
- public static long ObjToLong(this object thisValue)
- {
- long reval = 0;
- if (thisValue == null) return 0;
- if (thisValue != DBNull.Value && long.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return reval;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static double ObjToMoney(this object thisValue)
- {
- double reval = 0;
- if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return 0;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <param name="errorValue"></param>
- /// <returns></returns>
- public static double ObjToMoney(this object thisValue, double errorValue)
- {
- double reval = 0;
- if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return errorValue;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static string ObjToString(this object thisValue)
- {
- if (thisValue != null) return thisValue.ToString().Trim();
- return "";
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static bool IsNotEmptyOrNull(this object thisValue)
- {
- return ObjToString(thisValue) != "" && ObjToString(thisValue) != "undefined" && ObjToString(thisValue) != "null";
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <param name="errorValue"></param>
- /// <returns></returns>
- public static string ObjToString(this object thisValue, string errorValue)
- {
- if (thisValue != null) return thisValue.ToString().Trim();
- return errorValue;
- }
-
- public static bool IsNullOrEmpty(this object thisValue) => thisValue == null || thisValue == DBNull.Value || string.IsNullOrWhiteSpace(thisValue.ToString());
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static Decimal ObjToDecimal(this object thisValue)
- {
- Decimal reval = 0;
- if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return 0;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <param name="errorValue"></param>
- /// <returns></returns>
- public static Decimal ObjToDecimal(this object thisValue, decimal errorValue)
- {
- Decimal reval = 0;
- if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return errorValue;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static DateTime ObjToDate(this object thisValue)
- {
- DateTime reval = DateTime.MinValue;
- if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval))
- {
- reval = Convert.ToDateTime(thisValue);
- }
-
- return reval;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <param name="errorValue"></param>
- /// <returns></returns>
- public static DateTime ObjToDate(this object thisValue, DateTime errorValue)
- {
- DateTime reval = DateTime.MinValue;
- if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return errorValue;
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static bool ObjToBool(this object thisValue)
- {
- bool reval = false;
- if (thisValue != null && thisValue != DBNull.Value && bool.TryParse(thisValue.ToString(), out reval))
- {
- return reval;
- }
-
- return reval;
- }
-
-
- /// <summary>
- /// 鑾峰彇褰撳墠鏃堕棿鐨勬椂闂存埑
- /// </summary>
- /// <param name="thisValue"></param>
- /// <returns></returns>
- public static string DateToTimeStamp(this DateTime thisValue)
- {
- TimeSpan ts = thisValue - new DateTime(1970, 1, 1, 0, 0, 0, 0);
- return Convert.ToInt64(ts.TotalSeconds).ToString();
- }
-
- public static object ChangeType(this object value, Type type)
- {
- if (value == null && type.IsGenericType) return Activator.CreateInstance(type);
- if (value == null) return null;
- if (type == value.GetType()) return value;
- if (type.IsEnum)
- {
- if (value is string)
- return Enum.Parse(type, value as string);
- else
- return Enum.ToObject(type, value);
- }
-
- if (!type.IsInterface && type.IsGenericType)
- {
- Type innerType = type.GetGenericArguments()[0];
- object innerValue = ChangeType(value, innerType);
- return Activator.CreateInstance(type, new object[] { innerValue });
- }
-
- if (value is string && type == typeof(Guid)) return new Guid(value as string);
- if (value is string && type == typeof(Version)) return new Version(value as string);
- if (!(value is IConvertible)) return value;
- return Convert.ChangeType(value, type);
- }
-
- public static object ChangeTypeList(this object value, Type type)
- {
- if (value == null) return default;
-
- var gt = typeof(List<>).MakeGenericType(type);
- dynamic lis = Activator.CreateInstance(gt);
-
- var addMethod = gt.GetMethod("Add");
- string values = value.ToString();
- if (values != null && values.StartsWith("(") && values.EndsWith(")"))
- {
- string[] splits;
- if (values.Contains("\",\""))
- {
- splits = values.Remove(values.Length - 2, 2)
- .Remove(0, 2)
- .Split("\",\"");
- }
- else
- {
- splits = values.Remove(0, 1)
- .Remove(values.Length - 2, 1)
- .Split(",");
- }
-
- foreach (var split in splits)
- {
- var str = split;
- if (split.StartsWith("\"") && split.EndsWith("\""))
- {
- str = split.Remove(0, 1)
- .Remove(split.Length - 2, 1);
- }
-
- addMethod.Invoke(lis, new object[] { ChangeType(str, type) });
- }
- }
-
- return lis;
- }
-
- public static string ToJson(this object value)
- {
- return JsonConvert.SerializeObject(value);
- }
-
- public static bool IsNumeric(this object value)
- {
- if (value == null)
- return false;
- bool reslut = decimal.TryParse(value.ToString(), out decimal _number);
- return reslut;
- }
-
- public static bool IsInt(this object obj)
- {
- if (obj == null)
- return false;
- bool reslut = Int32.TryParse(obj.ToString(), out int _number);
- return reslut;
-
- }
- public static bool IsDate(this object str)
- {
- return str.IsDate(out _);
- }
- public static bool IsDate(this object str, out DateTime dateTime)
- {
- dateTime = DateTime.Now;
- if (str == null || str.ToString() == "")
- {
- return false;
- }
- return DateTime.TryParse(str.ToString(), out dateTime);
- }
-
- /// <summary>
- /// 鏍规嵁浼犲叆鏍煎紡鍒ゆ柇鏄惁涓哄皬鏁�
- /// </summary>
- /// <param name="str"></param>
- /// <param name="formatString">18,5</param>
- /// <returns></returns>
- public static bool IsNumber(this string str, string formatString)
- {
- if (string.IsNullOrEmpty(str)) return false;
-
- return Regex.IsMatch(str, @"^[+-]?\d*[.]?\d*$");
- }
-
- public static bool IsGuid(this string guid)
- {
- Guid newId;
- return guid.GetGuid(out newId);
- }
-
- public static bool GetGuid(this string guid, out Guid outId)
- {
- Guid emptyId = Guid.Empty;
- return Guid.TryParse(guid, out outId);
- }
-
- /// <summary>
- /// 杞崲涓虹煭鏁村瀷 qy 2024-7-15
- /// </summary>
- /// <param name="data">鏁版嵁</param>
- public static short ToShort(this object data)
- {
- if (data == null)
- return 0;
- short result;
- var success = short.TryParse(data.ToString(), out result);
- if (success)
- return result;
- try
- {
- return Convert.ToInt16(data);
- }
- catch (Exception)
- {
- return 0;
- }
- }
-
- /// <summary>
- /// 杞崲涓洪珮绮惧害娴偣鏁�,骞舵寜鎸囧畾鐨勫皬鏁颁綅4鑸�5鍏� qy 2024-7-15
- /// </summary>
- /// <param name="data">鏁版嵁</param>
- /// <param name="digits">灏忔暟浣嶆暟</param>
- public static decimal ToDecimal(this object data, int digits)
- {
- return Math.Round(ObjToDecimal(data), digits);
- }
-
-
-
- /// <summary>
- /// 鏋氫妇杞琇ist qy 2024-7-15
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- public static List<object> GetEnumList<T>()
- {
- List<object> list = new List<object>();
- var t = typeof(T);
- foreach (var item in Enum.GetValues(typeof(T)))
- {
- FieldInfo f = t.GetField(Enum.GetName(typeof(T), item));
- var r = (System.ComponentModel.DescriptionAttribute[])f.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
- list.Add(new { ID = item, value = Enum.GetName(typeof(T), item), name = r[0].Description });
- }
- return list;
- }
-
- /// <summary>
- /// 楠岃瘉鍔ㄦ�佺被鍨嬪厓绱犳槸鍚︿负绌� qy 2024-7-15
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public static bool CheckDynamic(object obj)
- {
- return (obj != null && Convert.ToString(obj) != "") ? true : false;
- }
-
- /// <summary>
- /// 鍔ㄦ�佺被鍨嬪厓绱犺浆瀛楃涓插苟瑙g爜 qy 2024-7-15
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public static string DynamicToString(object obj)
- {
- return CheckDynamic(obj) ? HttpUtility.UrlDecode(Convert.ToString(obj).Trim()) : "";
- }
-
- /// <summary>
- /// DataTable杞负json qy 2024-7-15
- /// </summary>
- /// <param name="parObjRefDataTable">DataTable</param>
- /// <returns>json鏁版嵁</returns>
- public static string ToJson(this DataTable parObjRefDataTable)
- {
- List<object> objArrList = new List<object>();
-
- foreach (DataRow objDataRow in parObjRefDataTable.Rows)
- {
- Dictionary<string, object> objResult = new Dictionary<string, object>();
-
- foreach (DataColumn objDataColumn in parObjRefDataTable.Columns)
- objResult.Add(objDataColumn.ColumnName, objDataRow[objDataColumn].ToString());
-
- objArrList.Add(objResult);
- }
-
- return ToJson(objArrList);
- }
- /// <summary>
- /// Json杞琇ist qy 2024-7-15
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="parJson"></param>
- /// <returns></returns>
- public static List<T> JsonToList<T>(this string parJson)
- {
- if (string.IsNullOrWhiteSpace(parJson))
- {
- return new List<T>();
- }
- else
- {
- return JsonConvert.DeserializeObject<List<T>>(parJson);
- }
- }
-
- /// <summary>
- /// 鏃ユ湡杞负unix鍊�
- /// </summary>
- /// <param name="dt"></param>
- /// <param name="utc">T:鎸塙TC鏃堕棿璁$畻(榛樿);F:鎸夋湰鍦版椂闂磋绠�</param>
- /// <returns></returns>
- /// <summary>
- /// 鏃ユ湡杞负unix鍊�
- /// </summary>
- /// <param name="dt">鏃ユ湡鏃堕棿</param>
- /// <param name="utc">T:鎸塙TC鏃堕棿璁$畻(榛樿);F:鎸夋湰鍦版椂闂磋绠�</param>
- /// <returns></returns>
- public static double ToUnix(this DateTime dt, bool utc = true)
- {
- double intResult = 0;
- System.DateTime startTime = TimeZoneInfo.ConvertTime(new System.DateTime(1970, 1, 1), TimeZoneInfo.Utc, TimeZoneInfo.Local);
- intResult = (dt - startTime).TotalSeconds;
- intResult = Math.Round(intResult, 0);
- return intResult;
- }
-
- #region 鍒ゆ柇鏄惁涓哄瓧绗︿覆 qy 2024-7-15
- /// <summary>
- /// 鍒ゆ柇瀛楃涓叉槸鍚︿负鍚堟硶鐨刯son瀛楃涓� qy 2024-7-15
- /// </summary>
- /// <param name="json"></param>
- /// <returns></returns>
- public static bool IsJson(string json)
- {
- int errIndex;
- return IsJson(json, out errIndex);
- }
- public static bool IsJson(string json, out int errIndex)
- {
- errIndex = 0;
- if (IsJsonStart(ref json))
- {
- CharState cs = new CharState();
- char c;
- for (int i = 0; i < json.Length; i++)
- {
- c = json[i];
- if (SetCharState(c, ref cs) && cs.childrenStart)//璁剧疆鍏抽敭绗﹀彿鐘舵�併��
- {
- string item = json.Substring(i);
- int err;
- int length = GetValueLength(item, true, out err);
- cs.childrenStart = false;
- if (err > 0)
- {
- errIndex = i + err;
- return false;
- }
- i = i + length - 1;
- }
- if (cs.isError)
- {
- errIndex = i;
- return false;
- }
- }
-
- return !cs.arrayStart && !cs.jsonStart;
- }
- return false;
- }
-
- private static bool IsJsonStart(ref string json)
- {
- if (!string.IsNullOrEmpty(json))
- {
- json = json.Trim('\r', '\n', ' ');
- if (json.Length > 1)
- {
- char s = json[0];
- char e = json[json.Length - 1];
- return (s == '{' && e == '}') || (s == '[' && e == ']');
- }
- }
- return false;
- }
-
- /// <summary>
- /// 鑾峰彇鍊肩殑闀垮害锛堝綋Json鍊煎祵濂椾互"{"鎴�"["寮�澶存椂锛� qy 2024-7-15
- /// </summary>
- private static int GetValueLength(string json, bool breakOnErr, out int errIndex)
- {
- errIndex = 0;
- int len = 0;
- if (!string.IsNullOrEmpty(json))
- {
- CharState cs = new CharState();
- char c;
- for (int i = 0; i < json.Length; i++)
- {
- c = json[i];
- if (!SetCharState(c, ref cs))//璁剧疆鍏抽敭绗﹀彿鐘舵�併��
- {
- if (!cs.jsonStart && !cs.arrayStart)//json缁撴潫锛屽張涓嶆槸鏁扮粍锛屽垯閫�鍑恒��
- {
- break;
- }
- }
- else if (cs.childrenStart)//姝e父瀛楃锛屽�肩姸鎬佷笅銆�
- {
- int length = GetValueLength(json.Substring(i), breakOnErr, out errIndex);//閫掑綊瀛愬�硷紝杩斿洖涓�涓暱搴︺�傘�傘��
- cs.childrenStart = false;
- cs.valueStart = 0;
- //cs.state = 0;
- i = i + length - 1;
- }
- if (breakOnErr && cs.isError)
- {
- errIndex = i;
- return i;
- }
- if (!cs.jsonStart && !cs.arrayStart)//璁板綍褰撳墠缁撴潫浣嶇疆銆�
- {
- len = i + 1;//闀垮害姣旂储寮�+1
- break;
- }
- }
- }
- return len;
- }
-
- /// <summary>
- /// 瀛楃鐘舵�� qy 2024-7-15
- /// </summary>
- private class CharState
- {
- internal bool jsonStart = false;//浠� "{"寮�濮嬩簡...
- internal bool setDicValue = false;// 鍙互璁剧疆瀛楀吀鍊间簡銆�
- internal bool escapeChar = false;//浠�"\"杞箟绗﹀彿寮�濮嬩簡
- /// <summary>
- /// 鏁扮粍寮�濮嬨�愪粎绗竴寮�澶存墠绠椼�戯紝鍊煎祵濂楃殑浠ャ�恈hildrenStart銆戞潵鏍囪瘑銆�
- /// </summary>
- internal bool arrayStart = false;//浠�"[" 绗﹀彿寮�濮嬩簡
- internal bool childrenStart = false;//瀛愮骇宓屽寮�濮嬩簡銆�
- /// <summary>
- /// 銆�0 鍒濆鐘舵�侊紝鎴� 閬囧埌鈥�,鈥濋�楀彿銆戯紱銆�1 閬囧埌鈥滐細鈥濆啋鍙枫��
- /// </summary>
- internal int state = 0;
-
- /// <summary>
- /// 銆�-1 鍙栧�肩粨鏉熴�戙��0 鏈紑濮嬨�戙��1 鏃犲紩鍙峰紑濮嬨�戙��2 鍗曞紩鍙峰紑濮嬨�戙��3 鍙屽紩鍙峰紑濮嬨��
- /// </summary>
- internal int keyStart = 0;
- /// <summary>
- /// 銆�-1 鍙栧�肩粨鏉熴�戙��0 鏈紑濮嬨�戙��1 鏃犲紩鍙峰紑濮嬨�戙��2 鍗曞紩鍙峰紑濮嬨�戙��3 鍙屽紩鍙峰紑濮嬨��
- /// </summary>
- internal int valueStart = 0;
- internal bool isError = false;//鏄惁璇硶閿欒銆�
-
- internal void CheckIsError(char c)//鍙綋鎴愪竴绾у鐞嗭紙鍥犱负GetLength浼氶�掑綊鍒版瘡涓�涓瓙椤瑰鐞嗭級
- {
- if (keyStart > 1 || valueStart > 1)
- {
- return;
- }
- //绀轰緥 ["aa",{"bbbb":123,"fff","ddd"}]
- switch (c)
- {
- case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
- isError = jsonStart && state == 0;//閲嶅寮�濮嬮敊璇� 鍚屾椂涓嶆槸鍊煎鐞嗐��
- break;
- case '}':
- isError = !jsonStart || (keyStart != 0 && state == 0);//閲嶅缁撴潫閿欒 鎴栬�� 鎻愬墠缁撴潫{"aa"}銆傛甯哥殑鏈墈}
- break;
- case '[':
- isError = arrayStart && state == 0;//閲嶅寮�濮嬮敊璇�
- break;
- case ']':
- isError = !arrayStart || jsonStart;//閲嶅寮�濮嬮敊璇� 鎴栬�� Json 鏈粨鏉�
- break;
- case '"':
- case '\'':
- isError = !(jsonStart || arrayStart); //json 鎴栨暟缁勫紑濮嬨��
- if (!isError)
- {
- //閲嶅寮�濮� [""",{"" "}]
- isError = (state == 0 && keyStart == -1) || (state == 1 && valueStart == -1);
- }
- if (!isError && arrayStart && !jsonStart && c == '\'')//['aa',{}]
- {
- isError = true;
- }
- break;
- case ':':
- isError = !jsonStart || state == 1;//閲嶅鍑虹幇銆�
- break;
- case ',':
- isError = !(jsonStart || arrayStart); //json 鎴栨暟缁勫紑濮嬨��
- if (!isError)
- {
- if (jsonStart)
- {
- isError = state == 0 || (state == 1 && valueStart > 1);//閲嶅鍑虹幇銆�
- }
- else if (arrayStart)//["aa,] [,] [{},{}]
- {
- isError = keyStart == 0 && !setDicValue;
- }
- }
- break;
- case ' ':
- case '\r':
- case '\n'://[ "a",\r\n{} ]
- case '\0':
- case '\t':
- break;
- default: //鍊煎紑澶淬�傘��
- isError = (!jsonStart && !arrayStart) || (state == 0 && keyStart == -1) || (valueStart == -1 && state == 1);//
- break;
- }
- //if (isError)
- //{
-
- //}
- }
- }
- /// <summary>
- /// 璁剧疆瀛楃鐘舵��(杩斿洖true鍒欎负鍏抽敭璇嶏紝杩斿洖false鍒欏綋涓烘櫘閫氬瓧绗﹀鐞嗭級 qy 2024-7-15
- /// </summary>
- private static bool SetCharState(char c, ref CharState cs)
- {
- cs.CheckIsError(c);
- switch (c)
- {
- case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
- #region 澶ф嫭鍙�
- if (cs.keyStart <= 0 && cs.valueStart <= 0)
- {
- cs.keyStart = 0;
- cs.valueStart = 0;
- if (cs.jsonStart && cs.state == 1)
- {
- cs.childrenStart = true;
- }
- else
- {
- cs.state = 0;
- }
- cs.jsonStart = true;//寮�濮嬨��
- return true;
- }
- #endregion
- break;
- case '}':
- #region 澶ф嫭鍙风粨鏉�
- if (cs.keyStart <= 0 && cs.valueStart < 2 && cs.jsonStart)
- {
- cs.jsonStart = false;//姝e父缁撴潫銆�
- cs.state = 0;
- cs.keyStart = 0;
- cs.valueStart = 0;
- cs.setDicValue = true;
- return true;
- }
- // cs.isError = !cs.jsonStart && cs.state == 0;
- #endregion
- break;
- case '[':
- #region 涓嫭鍙峰紑濮�
- if (!cs.jsonStart)
- {
- cs.arrayStart = true;
- return true;
- }
- else if (cs.jsonStart && cs.state == 1)
- {
- cs.childrenStart = true;
- return true;
- }
- #endregion
- break;
- case ']':
- #region 涓嫭鍙风粨鏉�
- if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= 2 && cs.valueStart <= 0)//[{},333]//杩欐牱缁撴潫銆�
- {
- cs.keyStart = 0;
- cs.valueStart = 0;
- cs.arrayStart = false;
- return true;
- }
- #endregion
- break;
- case '"':
- case '\'':
- #region 寮曞彿
- if (cs.jsonStart || cs.arrayStart)
- {
- if (cs.state == 0)//key闃舵,鏈夊彲鑳芥槸鏁扮粍["aa",{}]
- {
- if (cs.keyStart <= 0)
- {
- cs.keyStart = (c == '"' ? 3 : 2);
- return true;
- }
- else if ((cs.keyStart == 2 && c == '\'') || (cs.keyStart == 3 && c == '"'))
- {
- if (!cs.escapeChar)
- {
- cs.keyStart = -1;
- return true;
- }
- else
- {
- cs.escapeChar = false;
- }
- }
- }
- else if (cs.state == 1 && cs.jsonStart)//鍊奸樁娈靛繀椤绘槸Json寮�濮嬩簡銆�
- {
- if (cs.valueStart <= 0)
- {
- cs.valueStart = (c == '"' ? 3 : 2);
- return true;
- }
- else if ((cs.valueStart == 2 && c == '\'') || (cs.valueStart == 3 && c == '"'))
- {
- if (!cs.escapeChar)
- {
- cs.valueStart = -1;
- return true;
- }
- else
- {
- cs.escapeChar = false;
- }
- }
-
- }
- }
- #endregion
- break;
- case ':':
- #region 鍐掑彿
- if (cs.jsonStart && cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 0)
- {
- if (cs.keyStart == 1)
- {
- cs.keyStart = -1;
- }
- cs.state = 1;
- return true;
- }
- // cs.isError = !cs.jsonStart || (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1);
- #endregion
- break;
- case ',':
- #region 閫楀彿 //["aa",{aa:12,}]
-
- if (cs.jsonStart)
- {
- if (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1)
- {
- cs.state = 0;
- cs.keyStart = 0;
- cs.valueStart = 0;
- //if (cs.valueStart == 1)
- //{
- // cs.valueStart = 0;
- //}
- cs.setDicValue = true;
- return true;
- }
- }
- else if (cs.arrayStart && cs.keyStart <= 2)
- {
- cs.keyStart = 0;
- //if (cs.keyStart == 1)
- //{
- // cs.keyStart = -1;
- //}
- return true;
- }
- #endregion
- break;
- case ' ':
- case '\r':
- case '\n'://[ "a",\r\n{} ]
- case '\0':
- case '\t':
- if (cs.keyStart <= 0 && cs.valueStart <= 0) //cs.jsonStart &&
- {
- return true;//璺宠繃绌烘牸銆�
- }
- break;
- default: //鍊煎紑澶淬�傘��
- if (c == '\\') //杞箟绗﹀彿
- {
- if (cs.escapeChar)
- {
- cs.escapeChar = false;
- }
- else
- {
- cs.escapeChar = true;
- return true;
- }
- }
- else
- {
- cs.escapeChar = false;
- }
- if (cs.jsonStart || cs.arrayStart) // Json 鎴栨暟缁勫紑濮嬩簡銆�
- {
- if (cs.keyStart <= 0 && cs.state == 0)
- {
- cs.keyStart = 1;//鏃犲紩鍙风殑
- }
- else if (cs.valueStart <= 0 && cs.state == 1 && cs.jsonStart)//鍙湁Json寮�濮嬫墠鏈夊�笺��
- {
- cs.valueStart = 1;//鏃犲紩鍙风殑
- }
- }
- break;
- }
- return false;
- }
-
- #endregion
-
- public static LinqExpressionType GetLinqCondition(this string stringType)
- {
- LinqExpressionType linqExpression;
- switch (stringType)
- {
- case HtmlElementType.Contains:
- linqExpression = LinqExpressionType.In;
- break;
- case HtmlElementType.ThanOrEqual:
- linqExpression = LinqExpressionType.ThanOrEqual;
- break;
- case HtmlElementType.LessOrequal:
- linqExpression = LinqExpressionType.LessThanOrEqual;
- break;
- case HtmlElementType.GT:
- linqExpression = LinqExpressionType.GreaterThan;
- break;
- case HtmlElementType.lt:
- linqExpression = LinqExpressionType.LessThan;
- break;
- case HtmlElementType.like:
- linqExpression = LinqExpressionType.Contains;
+锘縰sing NetTaste;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using System.Web;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Enums;
+
+namespace WIDESEA_Core.Helper
+{
+ public static class UtilConvert
+ {
+ private static DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
+
+ private static long longTime = 621355968000000000;
+
+ private static int samllTime = 10000000;
+ /// <summary>
+ /// 鏃堕棿鎴宠浆鎹㈡垚鏃ユ湡
+ /// </summary>
+ /// <param name="timeStamp"></param>
+ /// <returns></returns>
+ public static DateTime GetTimeSpmpToDate(this object timeStamp)
+ {
+ if (timeStamp == null) return dateStart;
+ DateTime dateTime = new DateTime(longTime + Convert.ToInt64(timeStamp) * samllTime, DateTimeKind.Utc).ToLocalTime();
+ return dateTime;
+ }
+
+ public static string Serialize(this object obj, JsonSerializerSettings formatDate = null)
+ {
+ if (obj == null) return null;
+ formatDate = formatDate ?? new JsonSerializerSettings
+ {
+ DateFormatString = "yyyy-MM-dd HH:mm:ss"
+ };
+ return JsonConvert.SerializeObject(obj, formatDate);
+ }
+
+ public static T DeserializeObject<T>(this string json)
+ {
+ if (string.IsNullOrEmpty(json))
+ {
+ return default(T);
+ }
+ if (json == "{}")
+ {
+ json = "[]";
+ }
+ return JsonConvert.DeserializeObject<T>(json);
+ }
+
+ public static string FirstLetterToLower(this string thisValue)
+ {
+ if (string.IsNullOrEmpty(thisValue)) return string.Empty;
+ string result = thisValue.Substring(0, 1).ToLower() + thisValue.Substring(1, thisValue.Length - 1);
+ return result;
+ }
+
+ public static string FirstLetterToUpper(this string thisValue)
+ {
+ if (string.IsNullOrEmpty(thisValue)) return string.Empty;
+ string result = thisValue.Substring(0, 1).ToUpper() + thisValue.Substring(1, thisValue.Length - 1);
+ return result;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static int ObjToInt(this object thisValue)
+ {
+ int reval = 0;
+ if (thisValue == null) return 0;
+ if (thisValue is Enum && thisValue != DBNull.Value && Enum.TryParse(thisValue.GetType(), thisValue.ToString(), out var val))
+ {
+ return Convert.ToInt32(val.ChangeType(typeof(int)));
+ }
+ if (thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return reval;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static int DoubleToInt(this double thisValue)
+ {
+ int reval = 0;
+
+ return Convert.ToInt32(thisValue);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <param name="errorValue"></param>
+ /// <returns></returns>
+ public static int ObjToInt(this object thisValue, int errorValue)
+ {
+ int reval = 0;
+ if (thisValue != null && thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return errorValue;
+ }
+
+ public static long ObjToLong(this object thisValue)
+ {
+ long reval = 0;
+ if (thisValue == null) return 0;
+ if (thisValue != DBNull.Value && long.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return reval;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static double ObjToMoney(this object thisValue)
+ {
+ double reval = 0;
+ if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return 0;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <param name="errorValue"></param>
+ /// <returns></returns>
+ public static double ObjToMoney(this object thisValue, double errorValue)
+ {
+ double reval = 0;
+ if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return errorValue;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static string ObjToString(this object thisValue)
+ {
+ if (thisValue != null) return thisValue.ToString().Trim();
+ return "";
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static bool IsNotEmptyOrNull(this object thisValue)
+ {
+ return ObjToString(thisValue) != "" && ObjToString(thisValue) != "undefined" && ObjToString(thisValue) != "null";
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <param name="errorValue"></param>
+ /// <returns></returns>
+ public static string ObjToString(this object thisValue, string errorValue)
+ {
+ if (thisValue != null) return thisValue.ToString().Trim();
+ return errorValue;
+ }
+
+ public static bool IsNullOrEmpty(this object thisValue) => thisValue == null || thisValue == DBNull.Value || string.IsNullOrWhiteSpace(thisValue.ToString());
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static Decimal ObjToDecimal(this object thisValue)
+ {
+ Decimal reval = 0;
+ if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return 0;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <param name="errorValue"></param>
+ /// <returns></returns>
+ public static Decimal ObjToDecimal(this object thisValue, decimal errorValue)
+ {
+ Decimal reval = 0;
+ if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return errorValue;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static DateTime ObjToDate(this object thisValue)
+ {
+ DateTime reval = DateTime.MinValue;
+ if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval))
+ {
+ reval = Convert.ToDateTime(thisValue);
+ }
+
+ return reval;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <param name="errorValue"></param>
+ /// <returns></returns>
+ public static DateTime ObjToDate(this object thisValue, DateTime errorValue)
+ {
+ DateTime reval = DateTime.MinValue;
+ if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return errorValue;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static bool ObjToBool(this object thisValue)
+ {
+ bool reval = false;
+ if (thisValue != null && thisValue != DBNull.Value && bool.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return reval;
+ }
+
+
+ /// <summary>
+ /// 鑾峰彇褰撳墠鏃堕棿鐨勬椂闂存埑
+ /// </summary>
+ /// <param name="thisValue"></param>
+ /// <returns></returns>
+ public static string DateToTimeStamp(this DateTime thisValue)
+ {
+ TimeSpan ts = thisValue - new DateTime(1970, 1, 1, 0, 0, 0, 0);
+ return Convert.ToInt64(ts.TotalSeconds).ToString();
+ }
+
+ public static object ChangeType(this object value, Type type)
+ {
+ if (value == null && type.IsGenericType) return Activator.CreateInstance(type);
+ if (value == null) return null;
+ if (type == value.GetType()) return value;
+ if (type.IsEnum)
+ {
+ if (value is string)
+ return Enum.Parse(type, value as string);
+ else
+ return Enum.ToObject(type, value);
+ }
+
+ if (!type.IsInterface && type.IsGenericType)
+ {
+ Type innerType = type.GetGenericArguments()[0];
+ object innerValue = ChangeType(value, innerType);
+ return Activator.CreateInstance(type, new object[] { innerValue });
+ }
+
+ if (value is string && type == typeof(Guid)) return new Guid(value as string);
+ if (value is string && type == typeof(Version)) return new Version(value as string);
+ if (!(value is IConvertible)) return value;
+ return Convert.ChangeType(value, type);
+ }
+
+ public static object ChangeTypeList(this object value, Type type)
+ {
+ if (value == null) return default;
+
+ var gt = typeof(List<>).MakeGenericType(type);
+ dynamic lis = Activator.CreateInstance(gt);
+
+ var addMethod = gt.GetMethod("Add");
+ string values = value.ToString();
+ if (values != null && values.StartsWith("(") && values.EndsWith(")"))
+ {
+ string[] splits;
+ if (values.Contains("\",\""))
+ {
+ splits = values.Remove(values.Length - 2, 2)
+ .Remove(0, 2)
+ .Split("\",\"");
+ }
+ else
+ {
+ splits = values.Remove(0, 1)
+ .Remove(values.Length - 2, 1)
+ .Split(",");
+ }
+
+ foreach (var split in splits)
+ {
+ var str = split;
+ if (split.StartsWith("\"") && split.EndsWith("\""))
+ {
+ str = split.Remove(0, 1)
+ .Remove(split.Length - 2, 1);
+ }
+
+ addMethod.Invoke(lis, new object[] { ChangeType(str, type) });
+ }
+ }
+
+ return lis;
+ }
+
+ public static string ToJson(this object value)
+ {
+ return JsonConvert.SerializeObject(value);
+ }
+
+ public static bool IsNumeric(this object value)
+ {
+ if (value == null)
+ return false;
+ bool reslut = decimal.TryParse(value.ToString(), out decimal _number);
+ return reslut;
+ }
+
+ public static bool IsInt(this object obj)
+ {
+ if (obj == null)
+ return false;
+ bool reslut = Int32.TryParse(obj.ToString(), out int _number);
+ return reslut;
+
+ }
+ public static bool IsDate(this object str)
+ {
+ return str.IsDate(out _);
+ }
+ public static bool IsDate(this object str, out DateTime dateTime)
+ {
+ dateTime = DateTime.Now;
+ if (str == null || str.ToString() == "")
+ {
+ return false;
+ }
+ return DateTime.TryParse(str.ToString(), out dateTime);
+ }
+
+ /// <summary>
+ /// 鏍规嵁浼犲叆鏍煎紡鍒ゆ柇鏄惁涓哄皬鏁�
+ /// </summary>
+ /// <param name="str"></param>
+ /// <param name="formatString">18,5</param>
+ /// <returns></returns>
+ public static bool IsNumber(this string str, string formatString)
+ {
+ if (string.IsNullOrEmpty(str)) return false;
+
+ return Regex.IsMatch(str, @"^[+-]?\d*[.]?\d*$");
+ }
+
+ public static bool IsGuid(this string guid)
+ {
+ Guid newId;
+ return guid.GetGuid(out newId);
+ }
+
+ public static bool GetGuid(this string guid, out Guid outId)
+ {
+ Guid emptyId = Guid.Empty;
+ return Guid.TryParse(guid, out outId);
+ }
+
+ /// <summary>
+ /// 杞崲涓虹煭鏁村瀷 qy 2024-7-15
+ /// </summary>
+ /// <param name="data">鏁版嵁</param>
+ public static short ToShort(this object data)
+ {
+ if (data == null)
+ return 0;
+ short result;
+ var success = short.TryParse(data.ToString(), out result);
+ if (success)
+ return result;
+ try
+ {
+ return Convert.ToInt16(data);
+ }
+ catch (Exception)
+ {
+ return 0;
+ }
+ }
+
+ /// <summary>
+ /// 杞崲涓洪珮绮惧害娴偣鏁�,骞舵寜鎸囧畾鐨勫皬鏁颁綅4鑸�5鍏� qy 2024-7-15
+ /// </summary>
+ /// <param name="data">鏁版嵁</param>
+ /// <param name="digits">灏忔暟浣嶆暟</param>
+ public static decimal ToDecimal(this object data, int digits)
+ {
+ return Math.Round(ObjToDecimal(data), digits);
+ }
+
+
+
+ /// <summary>
+ /// 鏋氫妇杞琇ist qy 2024-7-15
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ public static List<object> GetEnumList<T>()
+ {
+ List<object> list = new List<object>();
+ var t = typeof(T);
+ foreach (var item in Enum.GetValues(typeof(T)))
+ {
+ FieldInfo f = t.GetField(Enum.GetName(typeof(T), item));
+ var r = (System.ComponentModel.DescriptionAttribute[])f.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
+ list.Add(new { ID = item, value = Enum.GetName(typeof(T), item), name = r[0].Description });
+ }
+ return list;
+ }
+
+ /// <summary>
+ /// 楠岃瘉鍔ㄦ�佺被鍨嬪厓绱犳槸鍚︿负绌� qy 2024-7-15
+ /// </summary>
+ /// <param name="obj"></param>
+ /// <returns></returns>
+ public static bool CheckDynamic(object obj)
+ {
+ return (obj != null && Convert.ToString(obj) != "") ? true : false;
+ }
+
+ /// <summary>
+ /// 鍔ㄦ�佺被鍨嬪厓绱犺浆瀛楃涓插苟瑙g爜 qy 2024-7-15
+ /// </summary>
+ /// <param name="obj"></param>
+ /// <returns></returns>
+ public static string DynamicToString(object obj)
+ {
+ return CheckDynamic(obj) ? HttpUtility.UrlDecode(Convert.ToString(obj).Trim()) : "";
+ }
+
+ /// <summary>
+ /// DataTable杞负json qy 2024-7-15
+ /// </summary>
+ /// <param name="parObjRefDataTable">DataTable</param>
+ /// <returns>json鏁版嵁</returns>
+ public static string ToJson(this DataTable parObjRefDataTable)
+ {
+ List<object> objArrList = new List<object>();
+
+ foreach (DataRow objDataRow in parObjRefDataTable.Rows)
+ {
+ Dictionary<string, object> objResult = new Dictionary<string, object>();
+
+ foreach (DataColumn objDataColumn in parObjRefDataTable.Columns)
+ objResult.Add(objDataColumn.ColumnName, objDataRow[objDataColumn].ToString());
+
+ objArrList.Add(objResult);
+ }
+
+ return ToJson(objArrList);
+ }
+ /// <summary>
+ /// Json杞琇ist qy 2024-7-15
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="parJson"></param>
+ /// <returns></returns>
+ public static List<T> JsonToList<T>(this string parJson)
+ {
+ if (string.IsNullOrWhiteSpace(parJson))
+ {
+ return new List<T>();
+ }
+ else
+ {
+ return JsonConvert.DeserializeObject<List<T>>(parJson);
+ }
+ }
+
+ /// <summary>
+ /// 鏃ユ湡杞负unix鍊�
+ /// </summary>
+ /// <param name="dt"></param>
+ /// <param name="utc">T:鎸塙TC鏃堕棿璁$畻(榛樿);F:鎸夋湰鍦版椂闂磋绠�</param>
+ /// <returns></returns>
+ /// <summary>
+ /// 鏃ユ湡杞负unix鍊�
+ /// </summary>
+ /// <param name="dt">鏃ユ湡鏃堕棿</param>
+ /// <param name="utc">T:鎸塙TC鏃堕棿璁$畻(榛樿);F:鎸夋湰鍦版椂闂磋绠�</param>
+ /// <returns></returns>
+ public static double ToUnix(this DateTime dt, bool utc = true)
+ {
+ double intResult = 0;
+ System.DateTime startTime = TimeZoneInfo.ConvertTime(new System.DateTime(1970, 1, 1), TimeZoneInfo.Utc, TimeZoneInfo.Local);
+ intResult = (dt - startTime).TotalSeconds;
+ intResult = Math.Round(intResult, 0);
+ return intResult;
+ }
+
+ #region 鍒ゆ柇鏄惁涓哄瓧绗︿覆 qy 2024-7-15
+ /// <summary>
+ /// 鍒ゆ柇瀛楃涓叉槸鍚︿负鍚堟硶鐨刯son瀛楃涓� qy 2024-7-15
+ /// </summary>
+ /// <param name="json"></param>
+ /// <returns></returns>
+ public static bool IsJson(string json)
+ {
+ int errIndex;
+ return IsJson(json, out errIndex);
+ }
+ public static bool IsJson(string json, out int errIndex)
+ {
+ errIndex = 0;
+ if (IsJsonStart(ref json))
+ {
+ CharState cs = new CharState();
+ char c;
+ for (int i = 0; i < json.Length; i++)
+ {
+ c = json[i];
+ if (SetCharState(c, ref cs) && cs.childrenStart)//璁剧疆鍏抽敭绗﹀彿鐘舵�併��
+ {
+ string item = json.Substring(i);
+ int err;
+ int length = GetValueLength(item, true, out err);
+ cs.childrenStart = false;
+ if (err > 0)
+ {
+ errIndex = i + err;
+ return false;
+ }
+ i = i + length - 1;
+ }
+ if (cs.isError)
+ {
+ errIndex = i;
+ return false;
+ }
+ }
+
+ return !cs.arrayStart && !cs.jsonStart;
+ }
+ return false;
+ }
+
+ private static bool IsJsonStart(ref string json)
+ {
+ if (!string.IsNullOrEmpty(json))
+ {
+ json = json.Trim('\r', '\n', ' ');
+ if (json.Length > 1)
+ {
+ char s = json[0];
+ char e = json[json.Length - 1];
+ return (s == '{' && e == '}') || (s == '[' && e == ']');
+ }
+ }
+ return false;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鍊肩殑闀垮害锛堝綋Json鍊煎祵濂椾互"{"鎴�"["寮�澶存椂锛� qy 2024-7-15
+ /// </summary>
+ private static int GetValueLength(string json, bool breakOnErr, out int errIndex)
+ {
+ errIndex = 0;
+ int len = 0;
+ if (!string.IsNullOrEmpty(json))
+ {
+ CharState cs = new CharState();
+ char c;
+ for (int i = 0; i < json.Length; i++)
+ {
+ c = json[i];
+ if (!SetCharState(c, ref cs))//璁剧疆鍏抽敭绗﹀彿鐘舵�併��
+ {
+ if (!cs.jsonStart && !cs.arrayStart)//json缁撴潫锛屽張涓嶆槸鏁扮粍锛屽垯閫�鍑恒��
+ {
+ break;
+ }
+ }
+ else if (cs.childrenStart)//姝e父瀛楃锛屽�肩姸鎬佷笅銆�
+ {
+ int length = GetValueLength(json.Substring(i), breakOnErr, out errIndex);//閫掑綊瀛愬�硷紝杩斿洖涓�涓暱搴︺�傘�傘��
+ cs.childrenStart = false;
+ cs.valueStart = 0;
+ //cs.state = 0;
+ i = i + length - 1;
+ }
+ if (breakOnErr && cs.isError)
+ {
+ errIndex = i;
+ return i;
+ }
+ if (!cs.jsonStart && !cs.arrayStart)//璁板綍褰撳墠缁撴潫浣嶇疆銆�
+ {
+ len = i + 1;//闀垮害姣旂储寮�+1
+ break;
+ }
+ }
+ }
+ return len;
+ }
+
+ /// <summary>
+ /// 瀛楃鐘舵�� qy 2024-7-15
+ /// </summary>
+ private class CharState
+ {
+ internal bool jsonStart = false;//浠� "{"寮�濮嬩簡...
+ internal bool setDicValue = false;// 鍙互璁剧疆瀛楀吀鍊间簡銆�
+ internal bool escapeChar = false;//浠�"\"杞箟绗﹀彿寮�濮嬩簡
+ /// <summary>
+ /// 鏁扮粍寮�濮嬨�愪粎绗竴寮�澶存墠绠椼�戯紝鍊煎祵濂楃殑浠ャ�恈hildrenStart銆戞潵鏍囪瘑銆�
+ /// </summary>
+ internal bool arrayStart = false;//浠�"[" 绗﹀彿寮�濮嬩簡
+ internal bool childrenStart = false;//瀛愮骇宓屽寮�濮嬩簡銆�
+ /// <summary>
+ /// 銆�0 鍒濆鐘舵�侊紝鎴� 閬囧埌鈥�,鈥濋�楀彿銆戯紱銆�1 閬囧埌鈥滐細鈥濆啋鍙枫��
+ /// </summary>
+ internal int state = 0;
+
+ /// <summary>
+ /// 銆�-1 鍙栧�肩粨鏉熴�戙��0 鏈紑濮嬨�戙��1 鏃犲紩鍙峰紑濮嬨�戙��2 鍗曞紩鍙峰紑濮嬨�戙��3 鍙屽紩鍙峰紑濮嬨��
+ /// </summary>
+ internal int keyStart = 0;
+ /// <summary>
+ /// 銆�-1 鍙栧�肩粨鏉熴�戙��0 鏈紑濮嬨�戙��1 鏃犲紩鍙峰紑濮嬨�戙��2 鍗曞紩鍙峰紑濮嬨�戙��3 鍙屽紩鍙峰紑濮嬨��
+ /// </summary>
+ internal int valueStart = 0;
+ internal bool isError = false;//鏄惁璇硶閿欒銆�
+
+ internal void CheckIsError(char c)//鍙綋鎴愪竴绾у鐞嗭紙鍥犱负GetLength浼氶�掑綊鍒版瘡涓�涓瓙椤瑰鐞嗭級
+ {
+ if (keyStart > 1 || valueStart > 1)
+ {
+ return;
+ }
+ //绀轰緥 ["aa",{"bbbb":123,"fff","ddd"}]
+ switch (c)
+ {
+ case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
+ isError = jsonStart && state == 0;//閲嶅寮�濮嬮敊璇� 鍚屾椂涓嶆槸鍊煎鐞嗐��
+ break;
+ case '}':
+ isError = !jsonStart || (keyStart != 0 && state == 0);//閲嶅缁撴潫閿欒 鎴栬�� 鎻愬墠缁撴潫{"aa"}銆傛甯哥殑鏈墈}
+ break;
+ case '[':
+ isError = arrayStart && state == 0;//閲嶅寮�濮嬮敊璇�
+ break;
+ case ']':
+ isError = !arrayStart || jsonStart;//閲嶅寮�濮嬮敊璇� 鎴栬�� Json 鏈粨鏉�
+ break;
+ case '"':
+ case '\'':
+ isError = !(jsonStart || arrayStart); //json 鎴栨暟缁勫紑濮嬨��
+ if (!isError)
+ {
+ //閲嶅寮�濮� [""",{"" "}]
+ isError = (state == 0 && keyStart == -1) || (state == 1 && valueStart == -1);
+ }
+ if (!isError && arrayStart && !jsonStart && c == '\'')//['aa',{}]
+ {
+ isError = true;
+ }
+ break;
+ case ':':
+ isError = !jsonStart || state == 1;//閲嶅鍑虹幇銆�
+ break;
+ case ',':
+ isError = !(jsonStart || arrayStart); //json 鎴栨暟缁勫紑濮嬨��
+ if (!isError)
+ {
+ if (jsonStart)
+ {
+ isError = state == 0 || (state == 1 && valueStart > 1);//閲嶅鍑虹幇銆�
+ }
+ else if (arrayStart)//["aa,] [,] [{},{}]
+ {
+ isError = keyStart == 0 && !setDicValue;
+ }
+ }
+ break;
+ case ' ':
+ case '\r':
+ case '\n'://[ "a",\r\n{} ]
+ case '\0':
+ case '\t':
+ break;
+ default: //鍊煎紑澶淬�傘��
+ isError = (!jsonStart && !arrayStart) || (state == 0 && keyStart == -1) || (valueStart == -1 && state == 1);//
+ break;
+ }
+ //if (isError)
+ //{
+
+ //}
+ }
+ }
+ /// <summary>
+ /// 璁剧疆瀛楃鐘舵��(杩斿洖true鍒欎负鍏抽敭璇嶏紝杩斿洖false鍒欏綋涓烘櫘閫氬瓧绗﹀鐞嗭級 qy 2024-7-15
+ /// </summary>
+ private static bool SetCharState(char c, ref CharState cs)
+ {
+ cs.CheckIsError(c);
+ switch (c)
+ {
+ case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
+ #region 澶ф嫭鍙�
+ if (cs.keyStart <= 0 && cs.valueStart <= 0)
+ {
+ cs.keyStart = 0;
+ cs.valueStart = 0;
+ if (cs.jsonStart && cs.state == 1)
+ {
+ cs.childrenStart = true;
+ }
+ else
+ {
+ cs.state = 0;
+ }
+ cs.jsonStart = true;//寮�濮嬨��
+ return true;
+ }
+ #endregion
+ break;
+ case '}':
+ #region 澶ф嫭鍙风粨鏉�
+ if (cs.keyStart <= 0 && cs.valueStart < 2 && cs.jsonStart)
+ {
+ cs.jsonStart = false;//姝e父缁撴潫銆�
+ cs.state = 0;
+ cs.keyStart = 0;
+ cs.valueStart = 0;
+ cs.setDicValue = true;
+ return true;
+ }
+ // cs.isError = !cs.jsonStart && cs.state == 0;
+ #endregion
+ break;
+ case '[':
+ #region 涓嫭鍙峰紑濮�
+ if (!cs.jsonStart)
+ {
+ cs.arrayStart = true;
+ return true;
+ }
+ else if (cs.jsonStart && cs.state == 1)
+ {
+ cs.childrenStart = true;
+ return true;
+ }
+ #endregion
+ break;
+ case ']':
+ #region 涓嫭鍙风粨鏉�
+ if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= 2 && cs.valueStart <= 0)//[{},333]//杩欐牱缁撴潫銆�
+ {
+ cs.keyStart = 0;
+ cs.valueStart = 0;
+ cs.arrayStart = false;
+ return true;
+ }
+ #endregion
+ break;
+ case '"':
+ case '\'':
+ #region 寮曞彿
+ if (cs.jsonStart || cs.arrayStart)
+ {
+ if (cs.state == 0)//key闃舵,鏈夊彲鑳芥槸鏁扮粍["aa",{}]
+ {
+ if (cs.keyStart <= 0)
+ {
+ cs.keyStart = (c == '"' ? 3 : 2);
+ return true;
+ }
+ else if ((cs.keyStart == 2 && c == '\'') || (cs.keyStart == 3 && c == '"'))
+ {
+ if (!cs.escapeChar)
+ {
+ cs.keyStart = -1;
+ return true;
+ }
+ else
+ {
+ cs.escapeChar = false;
+ }
+ }
+ }
+ else if (cs.state == 1 && cs.jsonStart)//鍊奸樁娈靛繀椤绘槸Json寮�濮嬩簡銆�
+ {
+ if (cs.valueStart <= 0)
+ {
+ cs.valueStart = (c == '"' ? 3 : 2);
+ return true;
+ }
+ else if ((cs.valueStart == 2 && c == '\'') || (cs.valueStart == 3 && c == '"'))
+ {
+ if (!cs.escapeChar)
+ {
+ cs.valueStart = -1;
+ return true;
+ }
+ else
+ {
+ cs.escapeChar = false;
+ }
+ }
+
+ }
+ }
+ #endregion
+ break;
+ case ':':
+ #region 鍐掑彿
+ if (cs.jsonStart && cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 0)
+ {
+ if (cs.keyStart == 1)
+ {
+ cs.keyStart = -1;
+ }
+ cs.state = 1;
+ return true;
+ }
+ // cs.isError = !cs.jsonStart || (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1);
+ #endregion
+ break;
+ case ',':
+ #region 閫楀彿 //["aa",{aa:12,}]
+
+ if (cs.jsonStart)
+ {
+ if (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1)
+ {
+ cs.state = 0;
+ cs.keyStart = 0;
+ cs.valueStart = 0;
+ //if (cs.valueStart == 1)
+ //{
+ // cs.valueStart = 0;
+ //}
+ cs.setDicValue = true;
+ return true;
+ }
+ }
+ else if (cs.arrayStart && cs.keyStart <= 2)
+ {
+ cs.keyStart = 0;
+ //if (cs.keyStart == 1)
+ //{
+ // cs.keyStart = -1;
+ //}
+ return true;
+ }
+ #endregion
+ break;
+ case ' ':
+ case '\r':
+ case '\n'://[ "a",\r\n{} ]
+ case '\0':
+ case '\t':
+ if (cs.keyStart <= 0 && cs.valueStart <= 0) //cs.jsonStart &&
+ {
+ return true;//璺宠繃绌烘牸銆�
+ }
+ break;
+ default: //鍊煎紑澶淬�傘��
+ if (c == '\\') //杞箟绗﹀彿
+ {
+ if (cs.escapeChar)
+ {
+ cs.escapeChar = false;
+ }
+ else
+ {
+ cs.escapeChar = true;
+ return true;
+ }
+ }
+ else
+ {
+ cs.escapeChar = false;
+ }
+ if (cs.jsonStart || cs.arrayStart) // Json 鎴栨暟缁勫紑濮嬩簡銆�
+ {
+ if (cs.keyStart <= 0 && cs.state == 0)
+ {
+ cs.keyStart = 1;//鏃犲紩鍙风殑
+ }
+ else if (cs.valueStart <= 0 && cs.state == 1 && cs.jsonStart)//鍙湁Json寮�濮嬫墠鏈夊�笺��
+ {
+ cs.valueStart = 1;//鏃犲紩鍙风殑
+ }
+ }
+ break;
+ }
+ return false;
+ }
+
+ #endregion
+
+ public static LinqExpressionType GetLinqCondition(this string stringType)
+ {
+ LinqExpressionType linqExpression;
+ switch (stringType)
+ {
+ case HtmlElementType.Contains:
+ linqExpression = LinqExpressionType.In;
+ break;
+ case HtmlElementType.ThanOrEqual:
+ linqExpression = LinqExpressionType.ThanOrEqual;
+ break;
+ case HtmlElementType.LessOrequal:
+ linqExpression = LinqExpressionType.LessThanOrEqual;
+ break;
+ case HtmlElementType.GT:
+ linqExpression = LinqExpressionType.GreaterThan;
+ break;
+ case HtmlElementType.lt:
+ linqExpression = LinqExpressionType.LessThan;
+ break;
+ case HtmlElementType.like:
+ linqExpression = LinqExpressionType.Contains;
break;
case HtmlElementType.thanorequal:
linqExpression = LinqExpressionType.ThanOrEqual;
break;
case HtmlElementType.lessorequal:
linqExpression = LinqExpressionType.LessThanOrEqual;
- break;
+ break;
case HtmlElementType.notequal:
linqExpression = LinqExpressionType.NotEqual;
- break;
- default:
- linqExpression = LinqExpressionType.Equal;
- break;
- }
- return linqExpression;
- }
- }
-}
+ break;
+ default:
+ linqExpression = LinqExpressionType.Equal;
+ break;
+ }
+ return linqExpression;
+ }
+ }
+}
--
Gitblit v1.9.3