1、Utils類:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Web; using System.Web.Script.Serialization; using System.Xml; namespace DemoAPI { public class Utils { #region 001:DataSet、DataTable是否為空 /// <summary> /// 驗證DataTable是否為空,空返回FALSE,不為空返回TRUE /// </summary> /// <param name="dt">DataTable 對象</param> /// <returns></returns> public static bool isNoNullDataSet(DataTable dt) { bool bl = false; if (dt != null && dt.Rows.Count > 0) { bl = true; } return bl; } /// <summary> /// 驗證DataTable是否為空,空返回FALSE,不為空返回TRUE /// </summary> /// <param name="ds">DataSet 對象</param> /// <returns></returns> public static bool isNoNullDataSet(DataSet ds) { bool bl = false; if (ds != null && ds.Tables.Count > 0 && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { bl = true; } return bl; } #endregion #region 002:string是否為空 /// <summary> /// string是否為空,空返回FALSE,不為空返回TRUE /// </summary> /// <param name="dt">DataTable 對象</param> /// <returns></returns> public static bool isNoNullString(string str) { bool bl = false; if (str != null && !string.IsNullOrEmpty(str)) { bl = true; } return bl; } #endregion #region 003:Int32是否為空 /// <summary> /// int是否為空,空返回FALSE,不為空且大於0返回TRUE /// </summary> /// <param name="dt">DataTable 對象</param> /// <returns></returns> public static bool isNoNullInt32(Int32 val) { bool bl = false; if (val != null && val > 0) { bl = true; } return bl; } #endregion #region 003:DateTime是否為空 /// <summary> /// DateTime是否為空,空返回FALSE,不為空返回TRUE /// </summary> /// <param name="dt">DataTable 對象</param> /// <returns></returns> public static bool isNoNullDateTime(DateTime dt) { bool bl = false; DateTime init = new DateTime(1900, 1, 1); if (dt != null && !string.IsNullOrEmpty(dt.ToString()) && dt > init) { bl = true; } return bl; } #endregion #region 004獲取Get、Post提交的參數值 public static string GetPost(string name) { string value = HttpContext.Current.Request[name]; return value == null ? string.Empty : value.Trim(); } public static int GetPostInt(string name) { string value = HttpContext.Current.Request[name]; int tmp = 0; if (!string.IsNullOrWhiteSpace(value)) { int.TryParse(value, out tmp); } return tmp; } public static int? GetPostIntNull(string name) { string value = HttpContext.Current.Request[name]; int? tmp = 0; int t = 0; if (!string.IsNullOrWhiteSpace(value)) { if (int.TryParse(value, out t)) tmp = t; } else { tmp = null; } return tmp; } #endregion #region 設置全局變量 //獲得固有的加密字符串 //private static string jmStr = System.Configuration.ConfigurationManager.AppSettings["jmStr"].ToString(); private static string jmStr = "RXJY"; //設置加密的密鑰 private static string sKey = "華躍博弈精益求精"; //private static string tuiGuangUrl = System.Configuration.ConfigurationManager.AppSettings["tgurl"].ToString(); #endregion #region 可逆的加密方法 /// <summary> /// 可逆的加密方法 /// </summary> /// <param name="strEnCrypt">需要加密的字符串</param> /// <returns>加密后的結果</returns> public static string EnCrypt(string strEnCrypt) { try { DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider(); byte[] bs1 = Encoding.Default.GetBytes(strEnCrypt); dESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(sKey); dESCryptoServiceProvider.IV = Encoding.ASCII.GetBytes(sKey); MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateEncryptor(), CryptoStreamMode.Write); cryptoStream.Write(bs1, 0, (int)bs1.Length); cryptoStream.FlushFinalBlock(); StringBuilder stringBuilder = new StringBuilder(); byte[] bs2 = memoryStream.ToArray(); foreach (byte b in bs2) { stringBuilder.AppendFormat("{0:X2}", b); } string strBuilder = stringBuilder.ToString(); strBuilder = strBuilder + jmStr; return NiXu(strBuilder); } catch (Exception e) { //System.Web.HttpContext.Current.Response.Write(e.Message); //System.Web.HttpContext.Current.Response.End(); throw new Exception(e.Message); } } #endregion #region 可逆的解密方法 /// <summary> /// 可逆的解密方法 /// </summary> /// <param name="strDeCrypt">需要解密的字符串</param> /// <returns>解密后的字符串</returns> public static string DeCrypt(string strDeCrypt) { try { if (strDeCrypt != "" && strDeCrypt != null) { strDeCrypt = Utils.ReplaceStringTrim(strDeCrypt); string strBuilder = NiXu(strDeCrypt); strDeCrypt = strBuilder.Substring(0, strBuilder.LastIndexOf("" + jmStr + "")).ToString(); DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider(); byte[] bs = new byte[strDeCrypt.Length / 2]; for (int i = 0; i < strDeCrypt.Length / 2; i++) { int j = Convert.ToInt32(strDeCrypt.Substring(i * 2, 2), 16); bs[i] = (byte)j; } dESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(sKey); dESCryptoServiceProvider.IV = Encoding.ASCII.GetBytes(sKey); MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write); cryptoStream.Write(bs, 0, (int)bs.Length); cryptoStream.FlushFinalBlock(); new StringBuilder(); return Encoding.Default.GetString(memoryStream.ToArray()); } else { return "0"; } } catch (Exception e) { //System.Web.HttpContext.Current.Response.Write(e.Message); //System.Web.HttpContext.Current.Response.End(); //throw new Exception(e.Message); return "0"; } } #endregion #region 字符串逆序排列 /// <summary> /// 字符串逆序排列 /// </summary> /// <param name="txtStr">逆序前字符串</param> /// <returns>逆序后字符串</returns> private static string NiXu(string txtStr) { string niXuStr = ""; for (int i = txtStr.Length - 1; i >= 0; i--) { niXuStr += txtStr[i]; } return niXuStr; } #endregion #region 去除字符串中空格 /// <summary> /// 去除字符串中空格 /// </summary> /// <param name="zifu"></param> /// <returns></returns> public static string ReplaceStringTrim(string zifu) { return System.Text.RegularExpressions.Regex.Replace(zifu, @"\s+", ""); } #endregion /// <summary> /// 工程部加密 字符Md5加密 /// </summary> /// <param name="input">string:需要加密的字符串</param> /// <returns>string:加密后的字符串</returns> public static string GetMd5Hash(string input) { string txtStr = string.Empty; string niXuStr = string.Empty; //創建MD5CryptoServiceProvider對象實例. MD5 md5Hasher = MD5.Create(); // 輸入字符串轉換為一個字節數組並計算哈希 byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)); StringBuilder sBuilder = new StringBuilder(); // 循環每個哈希數,作為十六進制去匹配 for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } sBuilder.Append("RXJY"); txtStr = sBuilder.ToString(); for (int i = txtStr.Length - 1; i >= 0; i--) { niXuStr += txtStr[i]; } // 返回十六進制數組 return niXuStr; } /// <summary> /// 獲取當前星期第一天 /// </summary> /// <param name="datetime"></param> /// <returns></returns> public static DateTime GetWeekFirstDayMon() { var datetime = DateTime.Now; //星期一為第一天 int weeknow = Convert.ToInt32(datetime.DayOfWeek); //因為是以星期一為第一天,所以要判斷weeknow等於0時,要向前推6天。 weeknow = (weeknow == 0 ? (7 - 1) : (weeknow - 1)); int daydiff = (-1) * weeknow; //本周第一天 string FirstDay = datetime.AddDays(daydiff).ToString("yyyy-MM-dd"); return Convert.ToDateTime(FirstDay); } #region 獲取日任務的回訪剩余 /// <summary> /// 獲取日任務的回訪剩余 /// </summary> /// <param name="time"></param> /// <param name="t_cycle"></param> /// <returns></returns> public int GetDayVisitTime(DateTime? time, string t_cycle) { if (time == null) { var today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + t_cycle);//當天應寫回訪時間 var num = (today.AddDays(1) - DateTime.Now).Hours; return num; } else { var visitTime = Convert.ToDateTime(time);//寫回訪的時間 //對於日任務,如果當天已寫回訪,則計算到第二天應寫回訪的時間, //如果當天未寫回訪,則顯示應寫回訪時間-當前時間,如果到了第二天,則重新計算到第二天應寫回訪的倒計時 if (visitTime.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd")) { var hour = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + t_cycle).Hour;//當天應寫回訪時間 var nowHour = DateTime.Now.Hour; if (nowHour > hour) { return hour - nowHour; } else { return nowHour - hour; } } else { //應寫回訪時間-當前時間 var today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + t_cycle);//當天應寫回訪時間 var num = (today.AddDays(1) - DateTime.Now).Hours; return num; } } } #endregion #region 獲取周任務的回訪剩余 /// <summary> /// 獲取周任務的回訪剩余 /// </summary> /// <param name="time">近一次寫回訪的時間</param> /// <param name="chronography">每周同</param> /// <param name="t_cycle">幾點</param> /// <returns></returns> public int GetWeekVisitTime(DateTime? time, int chronography, string t_cycle) { if (time == null) { #region //計算現在到下次應寫回訪的時間差 int week = (int)DateTime.Now.DayOfWeek == 0 ? 7 : (int)DateTime.Now.DayOfWeek;//獲取當前時間是周幾 int nowHour = (int)DateTime.Now.Hour; int hour = int.Parse(t_cycle.Split(':')[0]); if ((week < chronography) || (week == chronography && nowHour < hour))//在規定的周日期之前顯示到本周的倒計時 { int num = (chronography - week) * 24 - DateTime.Now.Hour + int.Parse(t_cycle.Split(':')[0]); return num; } else //計算到下周應寫的倒計時 { int totDay = chronography + 7 - week - 1;//獲取到下周總的天數 //總的天數小時數+今天剩余小時數-當天寫的 int num = totDay * 24 + (24 - DateTime.Now.Hour) + int.Parse(t_cycle.Split(':')[0]); return num; } #endregion } else { var date = Convert.ToDateTime(time); //判斷本周是否寫過 if (GetWeekOfYear(DateTime.Now) == GetWeekOfYear(date)) { int week = (int)date.DayOfWeek == 0 ? 7 : (int)date.DayOfWeek;//獲取是周幾寫的 //判斷是否是規定的當天之前寫的 //之前寫的還顯示倒計時。之后的顯示到下周五的倒計時 if (week == chronography)//判斷是否是同一周的同一天-----是否在規定 的當天 寫的 { //當天已經寫過則計算當前當下周應寫的時間差 var noewWeek = (int)DateTime.Now.DayOfWeek == 0 ? 7 : (int)DateTime.Now.DayOfWeek;//獲取當前日期是周幾 int totDay = chronography + 7 - noewWeek - 1;//獲取到下周總的天數 //總的天數小時數+今天剩余小時數-當天寫的 int num = totDay * 24 + (24 - DateTime.Now.Hour) + int.Parse(t_cycle.Split(':')[0]); return num; } else if (week < chronography)//在規定的周日期之前寫的任務顯示到本周的倒計時 { var nowWeek = (int)DateTime.Now.DayOfWeek == 0 ? 7 : (int)DateTime.Now.DayOfWeek;//獲取當前日期是周幾 int num = (6 - nowWeek - 1) * 24 + int.Parse(t_cycle.Split(':')[0]) + 24 - DateTime.Now.Hour; return num; } else //計算到下周應寫的倒計時 { var nowWeek = (int)DateTime.Now.DayOfWeek == 0 ? 7 : (int)DateTime.Now.DayOfWeek;//獲取當前日期是周幾 int totDay = chronography + 7 - nowWeek - 1;//獲取到下周總的天數 //總的天數小時數+今天剩余小時數-當天寫的 int num = totDay * 24 + (24 - DateTime.Now.Hour) + int.Parse(t_cycle.Split(':')[0]); return num; } } else//如果本周沒有寫 { var nowWeek = (int)DateTime.Now.DayOfWeek == 0 ? 7 : (int)DateTime.Now.DayOfWeek;//獲取當前日期是周幾 int num = (chronography - nowWeek) * 24 - DateTime.Now.Hour + int.Parse(t_cycle.Split(':')[0]); return num; } } } #endregion #region 獲取月任務的回訪剩余 public int GetMonthVisitTime(DateTime? time, int chronography, string t_cycle) { if (time == null) { var now = DateTime.Now; int day = DateTime.Now.Day;//獲取當前時間是本月哪一天寫的 if (day < chronography)//在規定的月任務日期之前顯示到本月的倒計時 { //應寫日期減已寫的日期 int num = (chronography - day - 1) * 24 + (24 - DateTime.Now.Hour) + int.Parse(t_cycle.Split(':')[0]); return num; } else //計算到下月應寫的倒計時 { int days = GetDays(DateTime.Now);//獲取當月的天數 //當月的天數減去當前的天數 int totDay = days - day; int num = (totDay + chronography - 1) * 24 + (24 - DateTime.Now.Hour) + int.Parse(t_cycle.Split(':')[0]); return num; } } else { var date = Convert.ToDateTime(time);//最近一次回訪時間 //判斷是否是本月寫的 if (date.ToString("yyyy-MM") == DateTime.Now.ToString("yyyy-MM")) { int day = date.Day;//獲取是本月哪一天寫的 //判斷是否是規定的當天之前寫的 //之前寫的還顯示倒計時。之后的顯示到下月應寫的日期的倒計時 if (day == chronography)//判斷是否是月任務選中的當月的同一天 { //當天已經寫過則計算當前當下月應寫的時間差 int days = GetDays(DateTime.Now);//獲取當月的天數 //當月的天數減去當前的天數 int totDay = days - DateTime.Now.Day; //當月的天數+下月應寫之前的天數 int num = (totDay + chronography - 1) * 24 + (24 - DateTime.Now.Hour) + int.Parse(t_cycle.Split(':')[0]); return num; } else if (day < chronography)//在規定的月任務日期之前寫的任務顯示到本月的倒計時 { var nowDay = DateTime.Now.Day;//獲取當前日期是當月第幾天 //應寫日期減已寫的日期 int num = (chronography - nowDay - 1) * 24 + (24 - DateTime.Now.Hour) + int.Parse(t_cycle.Split(':')[0]); return num; } else //計算到下月應寫的倒計時 { int days = GetDays(DateTime.Now);//獲取當月的天數 //當月的天數減去當前的天數 int totDay = days - DateTime.Now.Day; int num = (totDay + chronography - 1) * 24 + (24 - DateTime.Now.Hour) + int.Parse(t_cycle.Split(':')[0]); return num; } } else//如果本月沒有寫 { int days = GetDays(DateTime.Now);//獲取當月的天數 //當月的天數減去當前的天數 int totDay = days - DateTime.Now.Day; int num = (totDay + chronography) * 24 - DateTime.Now.Hour + 12; return num; } } } #endregion private static int GetWeekOfYear(DateTime dt) { GregorianCalendar gc = new GregorianCalendar(); int weekOfYear = gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday); return weekOfYear; } private int GetDays(DateTime dt) { int day = DateTime.DaysInMonth(dt.Year, dt.Month); return day; } #region 回訪內容換行處理 /// <summary> /// 回訪內容換行處理 /// </summary> /// <param name="content"></param> /// <returns></returns> public static string DealVisitContent(string content) { content = content.Replace(";", ";</br>"); content = content.Replace(";", ";</br>"); return content; } #endregion #region 狀態對應階段 /// <summary> /// 狀態對應階段 /// </summary> /// <param name="content"></param> /// <returns></returns> public static string ZhuangTaiZhuanHuan(string ZhuangTai) { var jie = ""; switch (ZhuangTai) { case "0": jie = "在跟蹤"; break; case "5": jie = "在談"; break; case "7": jie = "已簽"; break; case "8": jie = "未簽"; break; case "18": jie = "商務打回"; break; case "21": jie = "初審打回"; break; case "22": jie = "終審打回"; break; case "2": jie = "地方放棄"; break; case "3": jie = "集團放棄"; break; case "17": jie = "商務審批"; break; case "23": case "24": case "25": jie = "主案審批"; break; default: jie = "暫無記載"; break; } return jie; } #endregion #region 傳入服務器地址 返回Json數據 /// <summary> /// 傳入服務器地址 返回Json數據 Get /// </summary> /// <param name="serviceAddress">http地址</param> /// <returns></returns> internal static string HttpReturnJson(string serviceAddress) { string retString = ""; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; if (request != null) { HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8); retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); } else { retString = "{'StatusMsg': '接口請求失敗!','StatusCode': -1}"; } return retString; } #endregion #region 根據圖片路徑返回圖片的字節流byte[] /// <summary> /// 根據圖片路徑返回圖片的字節流byte[] /// </summary> /// <param name="imagePath">圖片路徑</param> /// <returns>返回的字節流</returns> internal static byte[] GetImageByte(string imagePath) { FileStream files = new FileStream(imagePath, FileMode.Open); byte[] imgByte = new byte[files.Length]; files.Read(imgByte, 0, imgByte.Length); files.Close(); return imgByte; } #endregion #region 用於url傳值的base64加密算法 /// <summary> /// 用於url傳值的base64加密算法 /// </summary> /// <param name="input">需加密的字符串</param> /// <returns></returns> public static string GetParEncoded(string input) { byte[] temp = Encoding.Default.GetBytes(input); return Base64Encoder.Encoder.GetEncoded(temp); } public class Base64Encoder { #region base64加密算法 byte[] source; int length, length2; int blockCount; int paddingCount; public static Base64Encoder Encoder = new Base64Encoder(); public Base64Encoder() { } private void init(byte[] input) { source = input; length = input.Length; if ((length % 3) == 0) { paddingCount = 0; blockCount = length / 3; } else { paddingCount = 3 - (length % 3); blockCount = (length + paddingCount) / 3; } length2 = length + paddingCount; } public string GetEncoded(byte[] input) { //初始化 init(input); byte[] source2; source2 = new byte[length2]; for (int x = 0; x < length2; x++) { if (x < length) { source2[x] = source[x]; } else { source2[x] = 0; } } byte b1, b2, b3; byte temp, temp1, temp2, temp3, temp4; byte[] buffer = new byte[blockCount * 4]; char[] result = new char[blockCount * 4]; for (int x = 0; x < blockCount; x++) { b1 = source2[x * 3]; b2 = source2[x * 3 + 1]; b3 = source2[x * 3 + 2]; temp1 = (byte)((b1 & 252) >> 2); temp = (byte)((b1 & 3) << 4); temp2 = (byte)((b2 & 240) >> 4); temp2 += temp; temp = (byte)((b2 & 15) << 2); temp3 = (byte)((b3 & 192) >> 6); temp3 += temp; temp4 = (byte)(b3 & 63); buffer[x * 4] = temp1; buffer[x * 4 + 1] = temp2; buffer[x * 4 + 2] = temp3; buffer[x * 4 + 3] = temp4; } for (int x = 0; x < blockCount * 4; x++) { result[x] = sixbit2char(buffer[x]); } switch (paddingCount) { case 0: break; case 1: result[blockCount * 4 - 1] = '_'; break; case 2: result[blockCount * 4 - 1] = '_'; result[blockCount * 4 - 2] = '_'; break; default: break; } return new string(result); } private char sixbit2char(byte b) { char[] lookupTable = new char[64]{ 'A','B','C','D','E','F','G','H','I','J','K','L','$', 'N','O','P','Q','R','S','T','U','M','W','X','Y','Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m', 'n','o','p','q','*','s','t','u','v','w','x','y','z', '0','1','2','3','4','5','6','7','8','9','r','V'}; if ((b >= 0) && (b <= 63)) { return lookupTable[(int)b]; } else { return ' '; } } #endregion } #endregion #region 發送通知 /// <summary> /// 發送通知 /// </summary> /// <param name="AlertText"></param> /// <param name="Iphone"></param> /// <param name="Type"></param> /// <param name="Group"></param> /// <param name="AlertTitle"></param> /// <param name="IsApnsProduction"></param> /// <param name="InitiatorCard"></param> /// <param name="InitiatorName"></param> /// <param name="RewardMoney"></param> /// <returns></returns> public static string SendPhone(IDictionary<string, string> dict, string url) { string results = ""; try { string par = string.Format("param={0}", Newtonsoft.Json.JsonConvert.SerializeObject(dict)); WebRequest request = WebRequest.Create(url); request.Method = "post"; request.ContentType = "application/x-www-form-urlencoded"; byte[] data = System.Text.Encoding.UTF8.GetBytes(par); request.ContentLength = data.Length; //設置請求流 System.IO.Stream requestStream = request.GetRequestStream(); //將參數加入到請求流中。 requestStream.Write(data, 0, data.Length); //獲取服務器端的響應 WebResponse response = request.GetResponse(); //獲取響應回來的流數據。 System.IO.Stream responseStream = response.GetResponseStream(); using (System.IO.StreamReader reader = new System.IO.StreamReader(responseStream)) { results = reader.ReadToEnd(); //seee = (JObject)JsonConvert.DeserializeObject(results); } } catch (Exception e) { NetLog.WriteTextLog(e.Message); } return results; } #endregion /// <summary> /// 公共事件獎罰 /// </summary> /// <param name="em_Sponsor">發起人卡號</param> /// <param name="em_Executor">執行人卡號</param> /// <param name="em_Content">執行內容</param> /// <param name="rp_Money">獎罰金額</param> /// <param name="em_theme">標題</param> /// <param name="rp_Method">獎罰方式 1=現金 2=工資</param> /// <returns></returns> public static string LaunchEventAndOver(string em_Sponsor, string em_Executor, string em_Content, string rp_Money, string em_theme, string rp_Method) { string ShiJianAPI = System.Configuration.ConfigurationManager.AppSettings["ShiJianAPI"]; string url = ShiJianAPI + "/api/EventPlatform/LaunchEventAndOver/"; string _params = "em_Sponsor=" + em_Sponsor + "&em_Executor=" + em_Executor + "&em_Content=" + em_Content + "&rp_Money=" + rp_Money + "&em_theme=" + em_theme + "&rp_Method=" + rp_Method; WebRequest request = WebRequest.Create(url); request.Method = "post"; request.ContentType = "application/x-www-form-urlencoded"; byte[] data = System.Text.Encoding.UTF8.GetBytes(_params); request.ContentLength = data.Length; //設置請求流 System.IO.Stream requestStream = request.GetRequestStream(); //將參數加入到請求流中。 requestStream.Write(data, 0, data.Length); //獲取服務器端的響應 WebResponse response = request.GetResponse(); //獲取響應回來的流數據。 System.IO.Stream responseStream = response.GetResponseStream(); string results = string.Empty; using (System.IO.StreamReader reader = new System.IO.StreamReader(responseStream)) { results = reader.ReadToEnd(); var seee = (JObject)JsonConvert.DeserializeObject(results); } return results; } #region json轉為DataTable /// <summary> /// json轉為DataTable /// </summary> /// <param name="strJson"></param> /// <returns></returns> public static DataTable JsonToDataTable(string strJson) { ////取出表名 //Regex rg = new Regex(@"(?<={)[^:]+(?=:/[)", RegexOptions.IgnoreCase); //string strName = rg.Match(strJson).Value; DataTable tb = null; ////去除表名 //strJson = strJson.Substring(strJson.IndexOf("[") + 1); //strJson = strJson.Substring(0, strJson.IndexOf("]")); //獲取數據 Regex rg = new Regex(@"(?<={)[^}]+(?=})"); MatchCollection mc = rg.Matches(strJson); for (int i = 0; i < mc.Count; i++) { string strRow = mc[i].Value; string[] strRows = strRow.Split(','); //創建表 if (tb == null) { tb = new DataTable(); tb.TableName = ""; foreach (string str in strRows) { DataColumn dc = new DataColumn(); string[] strCell = str.Split(':'); dc.ColumnName = strCell[0].ToString().Replace("\"", "").Trim(); tb.Columns.Add(dc); } tb.AcceptChanges(); } //增加內容 DataRow dr = tb.NewRow(); for (int r = 0; r < strRows.Length; r++) { dr[r] = strRows[r].Split(':')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("/", "").Replace("\"", "").Trim(); } tb.Rows.Add(dr); tb.AcceptChanges(); } return tb; } #endregion } }