WebApi的調(diào)用-2.后臺調(diào)用

httpClient調(diào)用方式

namespace SOA.Common
{
    //httpClient調(diào)用WebApi
    public class HttpClinetHelper
    {
        public static string GetHttpClient(string serverUrl, string method, WebHeaderCollection header)
        {
            using (HttpClient client = new HttpClient())
            {
                //如果有Basic認證的情況下,請自己封裝header
                if (header != null)
                    client.DefaultRequestHeaders.Add("Authorization", "BasicAuth " + header["Authorization"]);

                var response = client.GetAsync(serverUrl + method).Result;  //拿到異步結(jié)果
                Console.WriteLine(response.StatusCode); //確保http成功
                return response.Content.ReadAsStringAsync().Result;
            }
        }

        public static string PostHttpClient(string serverUrl, string method, Dictionary<string, string> param)
        {
            using (HttpClient client = new HttpClient())
            {
                var content = new FormUrlEncodedContent(param);
                var response = client.PostAsync(serverUrl + method, content).Result;  //拿到異步結(jié)果
                Console.WriteLine(response.StatusCode);//確保http成功
                return response.Content.ReadAsStringAsync().Result;
            }
        }
    }
}

httpWebReqeust調(diào)用方式(一般使用)

//WebRequest調(diào)用WebApi
    public class WebRequestHelper
    {

        /// <summary>
        ///   WebRequest的 Get 請求
        /// </summary>
        /// <param name="serverUrl" type="string">
        ///     <para>
        ///       api地址(地址+方法)     
        ///     </para>
        /// </param>
        /// <param name="paramData" type="string">
        ///     <para>
        ///       參數(shù)  
        ///     </para>
        /// </param>
        public static string GetWebRequest(string serverUrl, string paramData, WebHeaderCollection header)
        {
            string requestUrl = serverUrl;
            if (serverUrl.IndexOf('?') == -1 && paramData.IndexOf('?') == -1)
                requestUrl += "?";
            requestUrl += paramData;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
            if (header != null)
                request.Headers = header;
            request.ContentType = "application/json";
            request.Timeout = 30 * 1000;
            request.Method = "GET";
            string result = string.Empty;
            using (var res = request.GetResponse() as HttpWebResponse)
            {
                if (res.StatusCode == HttpStatusCode.OK)
                {
                    var reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                    result = reader.ReadToEnd();
                }
                return result;
            }
        }

        /// <summary>
        ///    WebRequest的 Post 請求  
        /// </summary>
        /// <param name="serverUrl" type="string">
        ///     <para>
        ///       api地址(地址+方法)      
        ///     </para>
        /// </param>
        /// <param name="postData" type="string">
        ///     <para>
        ///     參數(shù)    
        ///     </para>
        /// </param>
        public static string PostWebRequest(string serverUrl, string postData, WebHeaderCollection header)
        {
            var dataArray = Encoding.UTF8.GetBytes(postData);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serverUrl);
            if (header != null)
                request.Headers = header;
            request.ContentLength = dataArray.Length;
            //設置上傳服務的數(shù)據(jù)格式  
            request.ContentType = "application/json";
            request.Timeout = 30 * 1000;
            request.Method = "POST";

            //創(chuàng)建輸入流  
            Stream dataStream;
            try
            {
                dataStream = request.GetRequestStream();
            }
            catch (Exception)
            {
                return null;//連接服務器失敗  
            }
            //發(fā)送請求  
            dataStream.Write(dataArray, 0, dataArray.Length);
            dataStream.Close();

            //讀取返回值
            string result = string.Empty;
            using (var res = request.GetResponse() as HttpWebResponse)
            {
                if (res.StatusCode == HttpStatusCode.OK)
                {
                    var reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                    result = reader.ReadToEnd();
                }
                return result;
            }
        }
    }

封裝的調(diào)用

namespace SOA.Common
{
    public class ApiHelper
    {
        public static readonly ApiHelper Instance = new ApiHelper();
        public string RequestApi(string method, string queryString, WebHeaderCollection header = null)
        {
            string result = WebRequestHelper.GetWebRequest(ConfigHelper.Config.ApiUrl + method, queryString, header);

            return result;
        }

        public AjaxResult RequestApi<T>(string method, string queryString, WebHeaderCollection header = null)
        {
            var result = WebRequestHelper.GetWebRequest(ConfigHelper.Config.ApiUrl + method, queryString, header);

            return SerializeResult<T>(result);
        }

        /// <summary>
        /// 序列化結(jié)果
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="result"></param>
        /// <returns></returns>
        private AjaxResult SerializeResult<T>(string result)
        {
            AjaxResult resultModel = JsonConverter.FromJsonTo<AjaxResult>(result);
            if (resultModel.Status == 0 && resultModel.Data != null && !string.IsNullOrEmpty(resultModel.Data.ToString()))
            {
                if (resultModel.Data.ToString().IndexOf("[") == 0 && StringHelper.IsJson(resultModel.Data.ToString()))
                {
                    resultModel.Data = JsonConverter.FromJsonTo<List<T>>(resultModel.Data.ToString());
                }
                else if (StringHelper.IsJson(resultModel.Data.ToString()))
                {
                    resultModel.Data = JsonConverter.FromJsonTo<T>(resultModel.Data.ToString());
                }
            }
            return resultModel;
        }
    }
}

StringHelper.cs 幫助類

namespace SOA.Common
{
    public class StringHelper
    {
        public static string AreaAttr(string defaultStr, int max = 0, string tipTitle = "", string tipid = "")
        {
            string text = "";
            if (!string.IsNullOrWhiteSpace(defaultStr))
            {
                text = text + " tipmsg=\"" + defaultStr + "\" onfocus=\"utils.ContentKeyFocus(this)\" onblur=\"utils.ContentKeyBlur(this)\"";
                text += " style=\"color:#999;\"";
            }
            if (max > 0)
            {
                string text2 = text;
                text = string.Concat(new string[]
                {
                    text2,
                    " onkeyup=\"utils.ContentKeyUpDown2(this,",
                    max.ToString(),
                    ",'",
                    tipid,
                    "',0,'",
                    tipTitle,
                    "')\""
                });
            }
            return text;
        }
        public static string InputAttr(string val, string defaultStr, int max = 0, string tipTitle = "", string tipid = "")
        {
            string text = "";
            if (!string.IsNullOrWhiteSpace(val))
            {
                text = text + " value=\"" + val + "\"";
            }
            if (!string.IsNullOrWhiteSpace(defaultStr))
            {
                if (string.IsNullOrWhiteSpace(val))
                {
                    text = text + " value=\"" + defaultStr + "\"";
                }
                text = text + " tipmsg=\"" + defaultStr + "\" onfocus=\"utils.ContentKeyFocus(this)\" onblur=\"utils.ContentKeyBlur(this)\"";
                text += " style=\"color:#999;\"";
            }
            if (max > 0)
            {
                string text2 = text;
                text = string.Concat(new string[]
                {
                    text2,
                    " onkeyup=\"utils.ContentKeyUpDown2(this,",
                    max.ToString(),
                    ",'",
                    tipid,
                    "',0,'",
                    tipTitle,
                    "')\""
                });
            }
            return text;
        }
        public static string WapEncode(string source)
        {
            return (!string.IsNullOrEmpty(source)) ? source.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("‘", "&apos;").Replace("\"", "&quot;").Replace("$", "&#x24;").Replace(" ", "&nbsp;") : "";
        }
        public static string SubStr(string srcStr, int len)
        {
            string result;
            if (len < 1)
            {
                result = string.Empty;
            }
            else
            {
                if (string.IsNullOrEmpty(srcStr))
                {
                    result = srcStr;
                }
                else
                {
                    int byteCount = System.Text.Encoding.Default.GetByteCount(srcStr);
                    if (byteCount <= len)
                    {
                        result = srcStr;
                    }
                    else
                    {
                        int num = 0;
                        int num2 = 0;
                        char[] array = srcStr.ToCharArray();
                        char[] array2 = array;
                        for (int i = 0; i < array2.Length; i++)
                        {
                            char c = array2[i];
                            int byteCount2 = System.Text.Encoding.Default.GetByteCount(array, num2, 1);
                            int num3 = num + byteCount2;
                            if (num3 > len)
                            {
                                result = srcStr.Substring(0, num2) + "...";
                                return result;
                            }
                            num = num3;
                            num2++;
                        }
                        result = srcStr;
                    }
                }
            }
            return result;
        }
        public static string ReplaceIDS(string oldIds, bool isNoZero = true)
        {
            string result;
            if (string.IsNullOrWhiteSpace(oldIds))
            {
                result = "";
            }
            else
            {
                string[] array = oldIds.Trim().Trim(new char[]
                {
                    ','
                }).Split(new char[]
                {
                    ','
                });
                System.Collections.Generic.List<long> list = new System.Collections.Generic.List<long>();
                string[] array2 = array;
                for (int i = 0; i < array2.Length; i++)
                {
                    string text = array2[i];
                    long num = TypeHelper.StrToInt64(text.Trim(), 0L);
                    if (!isNoZero || num != 0L)
                    {
                        if (!list.Contains(num))
                        {
                            list.Add(num);
                        }
                    }
                }
                string text2 = "";
                foreach (long current in list)
                {
                    text2 = text2 + "," + current.ToString();
                }
                result = text2.Trim(new char[]
                {
                    ','
                });
            }
            return result;
        }
        public static string ReplaceStr2(string sourceStr)
        {
            string result;
            if (string.IsNullOrWhiteSpace(sourceStr))
            {
                result = sourceStr;
            }
            else
            {
                result = sourceStr.Trim().Replace(" ", "").Replace("'", "").Replace("\"", "");
            }
            return result;
        }
        public static string Cut(string str, int len, System.Text.Encoding encoding)
        {
            string result;
            if (string.IsNullOrEmpty(str))
            {
                result = str;
            }
            else
            {
                if (len <= 0)
                {
                    result = string.Empty;
                }
                else
                {
                    int byteCount = encoding.GetByteCount(str);
                    if (byteCount > len)
                    {
                        bool flag = byteCount == str.Length;
                        if (flag)
                        {
                            result = str.Substring(0, len);
                            return result;
                        }
                        int num = 0;
                        int num2 = 0;
                        char[] array = str.ToCharArray();
                        char[] array2 = array;
                        for (int i = 0; i < array2.Length; i++)
                        {
                            char c = array2[i];
                            int byteCount2 = encoding.GetByteCount(array, num2, 1);
                            int num3 = num + byteCount2;
                            if (num3 > len)
                            {
                                result = str.Substring(0, num2);
                                return result;
                            }
                            num = num3;
                            num2++;
                        }
                    }
                    result = str;
                }
            }
            return result;
        }
        public static int GetChineseLength(string s)
        {
            int result;
            if (string.IsNullOrEmpty(s))
            {
                result = 0;
            }
            else
            {
                result = System.Text.Encoding.GetEncoding("gb2312").GetByteCount(s);
            }
            return result;
        }
        public static int GetUTF8Length(string s)
        {
            int result;
            if (string.IsNullOrEmpty(s))
            {
                result = 0;
            }
            else
            {
                result = System.Text.Encoding.UTF8.GetByteCount(s);
            }
            return result;
        }
        public static string StrFormat(string str)
        {
            string result;
            if (str == null)
            {
                result = "";
            }
            else
            {
                str = str.Replace("\r\n", "<br />");
                str = str.Replace("\n", "<br />");
                result = str;
            }
            return result;
        }
        public static string EncodeHtml(string strHtml)
        {
            string result;
            if (strHtml != "")
            {
                strHtml = strHtml.Replace(",", "&def");
                strHtml = strHtml.Replace("'", "&dot");
                strHtml = strHtml.Replace(";", "&dec");
                result = strHtml;
            }
            else
            {
                result = "";
            }
            return result;
        }
        public static string HtmlDecode(string str)
        {
            return HttpUtility.HtmlDecode(str);
        }
        public static string HtmlEncode(string str)
        {
            return HttpUtility.HtmlEncode(str);
        }
        public static string UrlEncode(string str)
        {
            return HttpUtility.UrlEncode(str);
        }
        public static string UrlDecode(string str)
        {
            return HttpUtility.UrlDecode(str);
        }
     
        public static bool StrIsNullOrEmpty(string str)
        {
            return str == null || str.Trim() == string.Empty;
        }
        public static string CutString(string str, int startIndex, int length)
        {
            string result;
            if (string.IsNullOrWhiteSpace(str))
            {
                result = "";
            }
            else
            {
                if (startIndex >= 0)
                {
                    if (length < 0)
                    {
                        length *= -1;
                        if (startIndex - length < 0)
                        {
                            length = startIndex;
                            startIndex = 0;
                        }
                        else
                        {
                            startIndex -= length;
                        }
                    }
                    if (startIndex > str.Length)
                    {
                        result = "";
                        return result;
                    }
                }
                else
                {
                    if (length < 0)
                    {
                        result = "";
                        return result;
                    }
                    if (length + startIndex <= 0)
                    {
                        result = "";
                        return result;
                    }
                    length += startIndex;
                    startIndex = 0;
                }
                if (str.Length - startIndex < length)
                {
                    length = str.Length - startIndex;
                }
                result = str.Substring(startIndex, length);
            }
            return result;
        }
        public static string CutString(string str, int startIndex)
        {
            string result;
            if (string.IsNullOrWhiteSpace(str))
            {
                result = "";
            }
            else
            {
                result = StringHelper.CutString(str, startIndex, str.Length);
            }
            return result;
        }
       
        public static string ToSqlInStr(System.Collections.Generic.List<int> ids)
        {
            string text = "";
            if (ids != null && ids.Count > 0)
            {
                foreach (int current in ids)
                {
                    text = text + current + ",";
                }
            }
            text = text.Trim(",".ToCharArray());
            return text;
        }
        public static string ToSqlInStr(System.Collections.Generic.List<long> ids)
        {
            string text = "";
            if (ids != null && ids.Count > 0)
            {
                foreach (long current in ids)
                {
                    text = text + current + ",";
                }
            }
            text = text.Trim(",".ToCharArray());
            return text;
        }
        public static string ToSqlInStr(System.Collections.Generic.List<string> ids)
        {
            string text = "";
            if (ids != null && ids.Count > 0)
            {
                foreach (string current in ids)
                {
                    text = text + "'" + current + "',";
                }
            }
            text = text.Trim(",".ToCharArray());
            return text;
        }
        public static string FilteSQLStr(string Str)
        {
            string result;
            if (string.IsNullOrEmpty(Str))
            {
                result = "";
            }
            else
            {
                Str = Str.Replace("'", "");
                Str = Str.Replace("\"", "");
                Str = Str.Replace("&", "&amp");
                Str = Str.Replace("<", "&lt");
                Str = Str.Replace(">", "&gt");
                Str = Str.Replace("delete", "");
                Str = Str.Replace("update", "");
                Str = Str.Replace("insert", "");
                result = Str;
            }
            return result;
        }




        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;
        }
        internal static bool IsJson(string json)
        {
            int errIndex;
            return IsJson(json, out errIndex);
        }
        internal 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)//設置關(guān)鍵符號狀態(tài)。
                    {
                        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;
        }

        /// <summary>
        /// 獲取值的長度(當Json值嵌套以"{"或"["開頭時)
        /// </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))//設置關(guān)鍵符號狀態(tài)。
                    {
                        if (!cs.jsonStart && !cs.arrayStart)//json結(jié)束,又不是數(shù)組,則退出。
                        {
                            break;
                        }
                    }
                    else if (cs.childrenStart)//正常字符,值狀態(tài)下。
                    {
                        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)//記錄當前結(jié)束位置。
                    {
                        len = i + 1;//長度比索引+1
                        break;
                    }
                }
            }
            return len;
        }
        /// <summary>
        /// 字符狀態(tài)
        /// </summary>
        private class CharState
        {
            internal bool jsonStart = false;//以 "{"開始了...
            internal bool setDicValue = false;// 可以設置字典值了。
            internal bool escapeChar = false;//以"\"轉(zhuǎn)義符號開始了
            /// <summary>
            /// 數(shù)組開始【僅第一開頭才算】,值嵌套的以【childrenStart】來標識。
            /// </summary>
            internal bool arrayStart = false;//以"[" 符號開始了
            internal bool childrenStart = false;//子級嵌套開始了。
            /// <summary>
            /// 【0 初始狀態(tài),或 遇到“,”逗號】;【1 遇到“:”冒號】
            /// </summary>
            internal int state = 0;

            /// <summary>
            /// 【-1 取值結(jié)束】【0 未開始】【1 無引號開始】【2 單引號開始】【3 雙引號開始】
            /// </summary>
            internal int keyStart = 0;
            /// <summary>
            /// 【-1 取值結(jié)束】【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);//重復結(jié)束錯誤 或者 提前結(jié)束{"aa"}。正常的有{}
                        break;
                    case '[':
                        isError = arrayStart && state == 0;//重復開始錯誤
                        break;
                    case ']':
                        isError = !arrayStart || jsonStart;//重復開始錯誤 或者 Json 未結(jié)束
                        break;
                    case '"':
                    case '\'':
                        isError = !(jsonStart || arrayStart); //json 或數(shù)組開始。
                        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;//重復出現(xiàn)。
                        break;
                    case ',':
                        isError = !(jsonStart || arrayStart); //json 或數(shù)組開始。
                        if (!isError)
                        {
                            if (jsonStart)
                            {
                                isError = state == 0 || (state == 1 && valueStart > 1);//重復出現(xiàn)。
                            }
                            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>
        /// 設置字符狀態(tài)(返回true則為關(guān)鍵詞,返回false則當為普通字符處理)
        /// </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 大括號結(jié)束
                    if (cs.keyStart <= 0 && cs.valueStart < 2 && cs.jsonStart)
                    {
                        cs.jsonStart = false;//正常結(jié)束。
                        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 中括號結(jié)束
                    if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= 2 && cs.valueStart <= 0)//[{},333]//這樣結(jié)束。
                    {
                        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階段,有可能是數(shù)組["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 == '\\') //轉(zhuǎn)義符號
                    {
                        if (cs.escapeChar)
                        {
                            cs.escapeChar = false;
                        }
                        else
                        {
                            cs.escapeChar = true;
                            return true;
                        }
                    }
                    else
                    {
                        cs.escapeChar = false;
                    }
                    if (cs.jsonStart || cs.arrayStart) // Json 或數(shù)組開始了。
                    {
                        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;
        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,739評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,826評論 18 139
  • 的發(fā)生的發(fā)生打發(fā) 說的發(fā)生的發(fā)生 放的薩菲撒的的發(fā)生的發(fā)生撒打發(fā)的飛灑撒打發(fā)法撒旦飛灑發(fā)生的飛灑地方是否發(fā)生的發(fā)生...
    yuki0053閱讀 644評論 0 0
  • 昨天,因為心情不太好然后找了一個自己的好朋友聊天,想傾訴一下自己內(nèi)心的不快。點開他的朋友圈,才發(fā)現(xiàn),他新交了女朋友...
    我是牛陽陽閱讀 1,382評論 4 5