using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Text; using System.Reflection; using System.Collections; using System.Data.Common; using System.Xml; using System.Web.Script.Serialization; namespace BeginScreen { /// /// Handler1 的摘要说明 /// public abstract class Handler1 : IHttpHandler, System.Web.SessionState.IRequiresSessionState { public virtual void OnInit() { } #region 虚 方法 public void ProcessRequest(HttpContext context) { OnInit(); context.Response.ContentType = "text/plain"; //context.Response.ContentType = "application/json"; context.Response.Buffer = true; context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); context.Response.AddHeader("pragma", "no-cache"); context.Response.AddHeader("cache-control", ""); context.Response.CacheControl = "no-cache"; try { if (HttpContext.Current.Request["cmd"] != null) { //if (HttpContext.Current.Session["userName"] == null && HttpContext.Current.Request["cmd"] != "userLogin") //{ // string json = ToJson("SessionOut"); // context.Response.Write(json);//返回给前台页面 // context.Response.End(); //} string cmd = HttpContext.Current.Request["cmd"]; var method = this.GetType().GetMethod(cmd); if (method != null) { method.Invoke(this, new object[] { context }); } } } catch (Exception) { } } #endregion #region DataTable转换成Json格式 /// /// DataTable转换成Json格式 分页格式 /// /// DataSet /// public static string Dataset2Json(DataTable dt, int total = -1) { StringBuilder json = new System.Text.StringBuilder(); //{"total":5,"rows":[ json.Append("{\"total\":"); if (total == -1) { json.Append(dt.Rows.Count); } else { json.Append(total); } json.Append(",\"rows\":["); //json.Append("["); json.Append(DataTable2Json(dt)); json.Append("]}"); return json.ToString(); } #endregion /// /// 不需要分页的Json格式 /// /// /// public static string Dataset1Json(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.Append("["); for (int i = 0; i < dt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { jsonBuilder.Append("\""); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\","); } if (dt.Columns.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } jsonBuilder.Append("},"); } if (dt.Rows.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } jsonBuilder.Append("]"); return jsonBuilder.ToString(); } #region sql语句分页 public string GetListByPage(string tbName, string strWhere, string orderby, int startIndex, int endIndex) { StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT * FROM ( "); strSql.Append(" SELECT ROW_NUMBER() OVER ("); if (!string.IsNullOrEmpty(orderby.Trim())) { strSql.Append("order by T." + orderby); } else { strSql.Append("order by T.Id desc"); } strSql.Append(")AS Row, T.* from " + tbName + " T "); if (!string.IsNullOrEmpty(strWhere.Trim())) { strSql.Append(" WHERE " + strWhere); } strSql.Append(" ) TT"); strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex); return strSql.ToString(); } #endregion #region dataTable转换成Json格式 /// /// dataTable转换成Json格式 子方法 /// /// /// public static string DataTable2Json(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder(); for (int i = 0; i < dt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { jsonBuilder.Append("\""); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\","); } if (dt.Columns.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } jsonBuilder.Append("},"); } if (dt.Rows.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } return jsonBuilder.ToString(); } #endregion dataTable转换成Json格式 #region 私有方法 /// /// 过滤特殊字符 /// private static string String2Json(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { char c = s.ToCharArray()[i]; switch (c) { case '\"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; case '/': sb.Append("\\/"); break; case '\b': sb.Append("\\b"); break; case '\f': sb.Append("\\f"); break; case '\n': sb.Append("\\n"); break; case '\r': sb.Append("\\r"); break; case '\t': sb.Append("\\t"); break; default: sb.Append(c); break; } } return sb.ToString(); } /// /// 格式化字符型、日期型、布尔型 /// private static string StringFormat(string str, Type type) { if (type == typeof(string)) { str = String2Json(str); str = "\"" + str + "\""; } else if (type == typeof(DateTime)) { str = "\"" + str + "\""; } else if (type == typeof(bool)) { str = str.ToLower(); } else if (type != typeof(string) && string.IsNullOrEmpty(str)) { str = "\"" + str + "\""; } return str; } #endregion #region List转换成Json /// /// List转换成Json /// public static string ListToJson(IList list) { object obj = list[0]; return ListToJson(list, obj.GetType().Name); } /// /// List转换成Json /// public static string ListToJson(IList list, string jsonName) { StringBuilder Json = new StringBuilder(); if (string.IsNullOrEmpty(jsonName)) jsonName = list[0].GetType().Name; Json.Append("{\"" + jsonName + "\":["); if (list.Count > 0) { for (int i = 0; i < list.Count; i++) { T obj = Activator.CreateInstance(); PropertyInfo[] pi = obj.GetType().GetProperties(); Json.Append("{"); for (int j = 0; j < pi.Length; j++) { Type type = pi[j].GetValue(list[i], null).GetType(); Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type)); if (j < pi.Length - 1) { Json.Append(","); } } Json.Append("}"); if (i < list.Count - 1) { Json.Append(","); } } } Json.Append("]}"); return Json.ToString(); } #endregion #region 对象转换为Json /// /// 对象转换为Json /// /// 对象 /// Json字符串 public static string ToJson(object jsonObject) { string jsonString = "{"; PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties(); for (int i = 0; i < propertyInfo.Length; i++) { object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null); string value = string.Empty; if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan) { value = "'" + objectValue.ToString() + "'"; } else if (objectValue is string) { value = "'" + ToJson(objectValue.ToString()) + "'"; } else if (objectValue is IEnumerable) { value = ToJson((IEnumerable)objectValue); } else { value = ToJson(objectValue.ToString()); } jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ","; } //jsonString.Remove(jsonString.Length - 1, jsonString.Length); jsonString = jsonString.Substring(0, jsonString.Length - 1); return jsonString + "}"; } #endregion #region 对象集合转换Json /// /// 对象集合转换Json /// /// 集合对象 /// Json字符串 public static string ToJson(IEnumerable array) { string jsonString = "["; foreach (object item in array) { jsonString += ToJson(item) + ","; } //jsonString.Remove(jsonString.Length - 1, jsonString.Length); jsonString = jsonString.Substring(0, jsonString.Length - 1); return jsonString + "]"; } #endregion #region 普通集合转换Json /// /// 普通集合转换Json /// /// 集合对象 /// Json字符串 public static string ToArrayString(IEnumerable array) { string jsonString = "["; foreach (object item in array) { jsonString = ToJson(item.ToString()) + ","; } jsonString.Remove(jsonString.Length - 1, jsonString.Length); return jsonString + "]"; } #endregion #region DataSet转换为Json /// /// DataSet转换为Json /// /// DataSet对象 /// Json字符串 public static string ToJson(DataSet dataSet) { string jsonString = "{"; foreach (DataTable table in dataSet.Tables) { jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ","; } jsonString = jsonString.TrimEnd(','); return jsonString + "}"; } #endregion #region Datatable转换为Json /// /// Datatable转换为Json /// /// Datatable对象 /// Json字符串 public static string ToJson(DataTable dt) { StringBuilder jsonString = new StringBuilder(); jsonString.Append("["); DataRowCollection drc = dt.Rows; for (int i = 0; i < drc.Count; i++) { jsonString.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { string strKey = dt.Columns[j].ColumnName; string strValue = drc[i][j].ToString(); Type type = dt.Columns[j].DataType; jsonString.Append("\"" + strKey + "\":"); strValue = StringFormat(strValue, type); if (j < dt.Columns.Count - 1) { jsonString.Append(strValue + ","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } jsonString.Remove(jsonString.Length - 1, 1); jsonString.Append("]"); return jsonString.ToString(); } /// /// DataTable转换为Json /// public static string ToJson(DataTable dt, string jsonName) { StringBuilder Json = new StringBuilder(); if (string.IsNullOrEmpty(jsonName)) jsonName = dt.TableName; Json.Append("{\"" + jsonName + "\":["); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { Json.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { Type type = dt.Rows[i][j].GetType(); Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type)); if (j < dt.Columns.Count - 1) { Json.Append(","); } } Json.Append("}"); if (i < dt.Rows.Count - 1) { Json.Append(","); } } } Json.Append("]}"); return Json.ToString(); } #endregion #region DataReader转换为Json /// /// DataReader转换为Json /// /// DataReader对象 /// Json字符串 public static string ToJson(DbDataReader dataReader) { StringBuilder jsonString = new StringBuilder(); jsonString.Append("["); while (dataReader.Read()) { jsonString.Append("{"); for (int i = 0; i < dataReader.FieldCount; i++) { Type type = dataReader.GetFieldType(i); string strKey = dataReader.GetName(i); string strValue = dataReader[i].ToString(); jsonString.Append("\"" + strKey + "\":"); strValue = StringFormat(strValue, type); if (i < dataReader.FieldCount - 1) { jsonString.Append(strValue + ","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } dataReader.Close(); jsonString.Remove(jsonString.Length - 1, 1); jsonString.Append("]"); return jsonString.ToString(); } #endregion #region 错误处理方法 public class message { public message(bool success, string msg, string countPage, string workerCurrentPage) { this.msg = msg; this.success = success; this.countPage = countPage; this.workerCurrentPage = workerCurrentPage; } public bool success { get; set; } public string msg { get; set; } public string countPage { get; set; } public string workerCurrentPage { get; set; } } public class message1 { public message1(bool success, string html, string msg, string systemType, string sendType,int messId, string countPage, string workerCurrentPage) { this.msg = msg; this.success = success; this.html = html; this.countPage = countPage; this.workerCurrentPage = workerCurrentPage; this.sendType = sendType; this.systemType = systemType; this.messId = messId; } public int messId { get; set; } public bool success { get; set; } public string html { get; set; } public string msg { get; set; } public string countPage { get; set; } public string workerCurrentPage { get; set; } public string sendType { get; set; } public string systemType { get; set; } } public string Error2String(ENTValidationError.ENTValidationErrors validationErrors) { string errText = ""; foreach (ENTValidationError validationError in validationErrors) { if (errText.Length > 0) { errText += "\r\n"; } errText += validationError.ErrorMessage; } return errText; } #endregion #region 字符串int验证 public static bool CheckInt(string strValue) { if (strValue == null || strValue == "") { return false; } else { return System.Text.RegularExpressions.Regex.IsMatch(strValue, @"^\d*$"); } } #endregion #region DataTable转xml格式字符串 public static string Serialize(DataTable dt) { string zqSpecial = ""; string xmlName = ""; string xmlNameEnd = ""; string xmlValuse = ""; string xmlValuseEnd = ""; if (dt.Rows.Count <= 0) return ""; foreach (DataRow row in dt.Rows) { zqSpecial += ""; zqSpecial += xmlName + row["name"].ToString() + xmlNameEnd; zqSpecial += xmlValuse + ConvertXml(row["value"].ToString()) + xmlValuseEnd; zqSpecial += ""; } return "" + zqSpecial + ""; } #endregion #region ShiftXML处理 /// /// 处理交班记录Xml /// /// /// public static string SerializeShiftXml(DataTable dt) { string zqSpecial = ""; string sign = ""; string signend = ""; string xmlName = ""; string xmlNameEnd = ""; string xmlValuse = ""; string xmlValuseEnd = ""; string xmlFlag = ""; string xmlFlagEnd = ""; string xmlShift = ""; string xmlShiftEnd = ""; if (dt.Rows.Count <= 0) return ""; foreach (DataRow row in dt.Rows) { zqSpecial += ""; zqSpecial += sign + row["sign"].ToString() + signend; zqSpecial += xmlName + row["name"].ToString() + xmlNameEnd; zqSpecial += xmlValuse + ConvertXml(row["value"].ToString()) + xmlValuseEnd; zqSpecial += xmlFlag + ConvertXml(row["flag"].ToString()) + xmlFlagEnd; zqSpecial += xmlShift + ConvertXml(row["shift"].ToString()) + xmlShiftEnd; zqSpecial += ""; } return "" + zqSpecial + ""; } public static DataTable AnalysisShiftXML(string xml, int id) { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); DataTable dt = new DataTable("Datas"); dt.Columns.Add("sign", Type.GetType("System.String")); dt.Columns.Add("name", Type.GetType("System.String")); dt.Columns.Add("value", Type.GetType("System.String")); dt.Columns.Add("flag", Type.GetType("System.String")); XmlNodeList rows = doc.GetElementsByTagName("root"); foreach (XmlNode xn in rows) { DataRow dr = dt.NewRow(); for (int i = 1; i < xn.ChildNodes.Count - 1; i++) { dr[i] = xn.ChildNodes[i].InnerText; if (xn.ChildNodes[1].InnerText == "ShiftId") { dr["value"] = id; } } dt.Rows.Add(dr); } return dt; } #endregion #region XML转义字符处理 frank /// /// XML转义字符处理 /// public static string ConvertXml(string xml) { xml = (char)1 + xml; //为了避免首字母为要替换的字符,前加前缀 for (int intNext = 0; true; ) { int intIndexOf = xml.IndexOf("&", intNext); intNext = intIndexOf + 1; //避免&被重复替换 if (intIndexOf <= 0) { break; } else { xml = xml.Substring(0, intIndexOf) + "&" + xml.Substring(intIndexOf + 1); } } for (; true; ) { int intIndexOf = xml.IndexOf("<"); if (intIndexOf <= 0) { break; } else { xml = xml.Substring(0, intIndexOf) + "<" + xml.Substring(intIndexOf + 1); } } for (; true; ) { int intIndexOf = xml.IndexOf(">"); if (intIndexOf <= 0) { break; } else { xml = xml.Substring(0, intIndexOf) + ">" + xml.Substring(intIndexOf + 1); } } for (; true; ) { int intIndexOf = xml.IndexOf("\""); if (intIndexOf <= 0) { break; } else { xml = xml.Substring(0, intIndexOf) + """ + xml.Substring(intIndexOf + 1); } } for (; true; ) { int intIndexOf = xml.IndexOf("'"); if (intIndexOf <= 0) { break; } else { xml = xml.Substring(0, intIndexOf) + "'" + xml.Substring(intIndexOf + 1); } } return xml.Replace(((char)1).ToString(), ""); } #endregion #region 解析xml生成DataTable frank public static DataTable AnalysisXML(string xml) { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); DataTable dt = new DataTable("Datas"); dt.Columns.Add("name", Type.GetType("System.String")); dt.Columns.Add("value", Type.GetType("System.String")); XmlNodeList rows = doc.GetElementsByTagName("root"); foreach (XmlNode xn in rows) { DataRow dr = dt.NewRow(); for (int i = 0; i < xn.ChildNodes.Count; i++) { dr[i] = xn.ChildNodes[i].InnerText; } dt.Rows.Add(dr); } return dt; } #endregion #region Json 字符串 转换为 DataTable数据集合 /// /// Json 字符串 转换为 DataTable数据集合 /// /// /// public static DataTable ToDataTable(string json) { DataTable dataTable = new DataTable(); //实例化 DataTable result; try { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值 ArrayList arrayList = javaScriptSerializer.Deserialize(json); if (arrayList.Count > 0) { foreach (Dictionary dictionary in arrayList) { if (dictionary.Keys.Count() == 0) { result = dataTable; return result; } if (dataTable.Columns.Count == 0) { foreach (string current in dictionary.Keys) { dataTable.Columns.Add(current, dictionary[current].GetType()); } } DataRow dataRow = dataTable.NewRow(); foreach (string current in dictionary.Keys) { dataRow[current] = dictionary[current]; } dataTable.Rows.Add(dataRow); //循环添加行到DataTable中 } } } catch { } result = dataTable; return result; } #endregion public bool IsReusable { get { return false; } } } }