C# Newtonsoft.Json解析json字符串處理 - JToken 用法

//*調用服務器API(獲取能夠處理的文件)
//一、使用JSON通訊協議(調用[待化驗任務API])
String retData = null;
{
    JToken json = JToken.Parse(Global.jsonTemplate);
    json["actionName"] = "待化驗任務API";
    json["action"] = "awaitLaboratory";
    json["paramInfo"]["kindId"] = Global.ExeCodeColData;//種類編碼
    //json["paramInfo"]["lab_orgdm"] = Global.ExeCodeColData;//設備機構代碼
    String jsonStr = JsonConvert.SerializeObject(json);
    jsonStr = HttpUtility.UrlEncode(jsonStr);//編碼後發送字符串,不然中文會出現亂碼
    retData = HttpUtil.HttpPost(Global.ServerCallPath, "json=" + jsonStr);//調用服務器接口
}

//判斷是否返回了數據
if (!String.IsNullOrEmpty(retData) && !String.IsNullOrEmpty(retData.Trim()))
{

    //格式化數據
    retData = retData.Trim();
    //轉換JSON對象
    JToken retDataJson = JToken.Parse(retData);

    ////---模擬數據開始---
    //JArray jsonArrTemp = JArray.Parse("[{tmuid:'aaa123',fileName:'aaa123_ypmc_20171117153900.png'},{tmuid:'bbb123',fileName:'bbb123_ypmc_20171117153900.png'}]");
    //retDataJson["data"] = jsonArrTemp;
    //retDataJson["bReturn"] = "true";
    //retDataJson["sReturn"] = "獲取數據成功![待化驗任務API(awaitLaboratory)]";
    ////---模擬數據結束---

    //判斷(調用[待化驗任務API])返回的結果是否成功
    if (retDataJson["bReturn"].ToString().ToLower().Trim() == "true")
    {

        //二、調用化驗任務API得到任務編號,去匹配文件名,若是沒匹配到,繼續輪詢化驗結果目錄。
        //取出有效數據
        JToken retDataJson_Data = retDataJson["data"];
        foreach (JToken item in retDataJson_Data)//遍歷數組
        {
            //獲取服務器上的數據
            String tmuid = item["tmuid"].ToString();
            String serFileName = item["fileName"].ToString().Trim();//獲取服務器提供的文件名
            bool bStatus = false;//false:默認未找到此任務編號對應的文件
            string strStatus = "";

            //遍歷本地文件名
            foreach (string itemFileName in files)
            {
                String localFileName = Path.GetFileName(itemFileName);//本地文件名

                //不使用服務端的文件擴展名,將文件擴展名與本地文件同步
                serFileName = Path.GetExtension(serFileName) != "" ? serFileName.Replace(Path.GetExtension(serFileName), Path.GetExtension(localFileName)) : serFileName + Path.GetExtension(localFileName);

                //判斷文件若是不存在,則跳出
                if (!File.Exists(itemFileName)) continue;

                //判斷服務器返回的TMUID,匹配文件名
                if (itemFileName.ToLower().IndexOf(tmuid.ToLower()) > 0)
                {
                    //*調用服務器API(上傳文件)
                    //三、若是匹配成功後上傳pdf文件,同時修改文件名(任務id+樣品名稱+時間),(調用[接收解析API])得到返回結果,若是成功提示成功而且把文件移動到成功文件夾,若是失敗提示失敗,把文件移動到失敗文件夾
                    String retData_UpLoadFile = null;
                    {
                        JToken json = JToken.Parse(Global.jsonTemplate);
                        json["actionName"] = "接收解析API(上傳文件API)";
                        json["action"] = "labUpLoadFile";
                        json["paramInfo"]["kindId"] = Global.ExeCodeColData;//種類編碼
                        json["paramInfo"]["taskId"] = tmuid;//任務編碼
                        json["paramInfo"]["localFileName"] = localFileName;//本地文件名
                        json["paramInfo"]["serFileName"] = serFileName;//服務端傳來的文件名
                        json["paramInfo"]["suffix"] = Path.GetExtension(serFileName).Replace(".", "");//本地文件擴展名
                        //json["paramInfo"]["lab_orgdm"] = Global.ExeCodeColData;//設備機構代碼
                        String jsonStr = JsonConvert.SerializeObject(json);
                        jsonStr = HttpUtility.UrlEncode(jsonStr);//編碼後發送字符串,不然中文會出現亂碼
                        retData_UpLoadFile = HttpUtil.UploadRequest(Global.ServerCallPath + "?json=" + jsonStr, itemFileName);//調用服務器接口(上傳文件到服務器)
                    }

                    //判斷是否返回了數據
                    if (!String.IsNullOrEmpty(retData_UpLoadFile) && !String.IsNullOrEmpty(retData_UpLoadFile.Trim()))
                    {
                        //格式化數據
                        retData_UpLoadFile = retData_UpLoadFile.Trim();
                        //轉換JSON對象
                        JToken retData_UpLoadFileJson = JToken.Parse(retData_UpLoadFile);

                        //*4.保存成功和失敗文件的目錄要天天建立當天的文件夾
                        string srcDirFile = itemFileName;//源目錄文件
                        string destDirFileSucceed = Global.PollingDirPathSucceed + "\\" + time_rq + "\\" + serFileName;//目的目錄文件(成功)
                        string destDirFileFailure = Global.PollingDirPathFailure + "\\" + time_rq + "\\" + serFileName;//目的目錄文件(失敗)

                        //判斷(調用[接收解析API(labUpLoadFile)])返回結果是否成功
                        if (retData_UpLoadFileJson["bReturn"].ToString().ToLower().Trim() == "true")
                        {
                            //調用成功:把文件移動到成功文件夾,同時修改文件名(任務id+樣品名稱+時間)

                            //移動文件(自動建立目錄)
                            if (FileUtil.moveFile(srcDirFile, destDirFileSucceed, true))
                            {
                                //打印日誌(移動文件成功)
                                strStatus = time + "  -  " + "成功" + "  -  " + localFileName + "  to  " + serFileName + "  -  " + retData_UpLoadFileJson["sReturn"].ToString();
                                //LogManager.WriteLog(LogFile.Trace, "函數timerMain_Tick:" + strStatus);
                            }
                            else
                            {
                                //打印日誌(移動文件失敗)
                                strStatus = time + "  -  " + "失敗" + "  -  " + localFileName + "  to  " + serFileName + " - 移動文件失敗!";
                                //LogManager.WriteLog(LogFile.Trace, "函數timerMain_Tick:" + strStatus);
                            }
                        }
                        else
                        {
                            //調用失敗:把文件移動到失敗文件夾
                            //調用[接收解析API(labUpLoadFile)]API失敗

                            //打印日誌
                            strStatus = time + "  -  " + "失敗" + "  -  " + localFileName + "  to  " + serFileName + "  -  " + retData_UpLoadFileJson["sReturn"].ToString();

                            //移動文件(自動建立目錄)
                            if (!FileUtil.moveFile(srcDirFile, destDirFileFailure, true))
                            {
                                //移動文件失敗
                                strStatus += " - 移動文件失敗!";
                            }

                            //LogManager.WriteLog(LogFile.Trace, "函數timerMain_Tick:" + strStatus);
                        }
                    }
                    else
                    {
                        //調用[接收解析API(labUpLoadFile)]API失敗
                        //打印日誌
                        strStatus = time + "  -  " + "失敗" + "  -  " + localFileName + "  to  " + serFileName + "  -  調用[接收解析API(labUpLoadFile)]API失敗!返回的數據爲空!!";
                        //LogManager.WriteLog(LogFile.Trace, "函數timerMain_Tick:" + strStatus );
                    }

                    //找到此任務編號對應的文件(賦值成功標識)
                    LogManager.WriteLog(LogFile.Trace, "函數timerMain_Tick:" + strStatus);
                    bStatus = true;
                    break;
                }
            }

            //判斷是否找到此任務編號對應的文件
            if (!bStatus)
            {
                strStatus = time + "  -  " + "失敗" + "  -  未找到此任務編號對應的文件:" + tmuid + "  to  " + serFileName;
                LogManager.WriteLog(LogFile.Trace, "函數timerMain_Tick:" + strStatus);
            }

            //加入列表
            listFiles.Items.Insert(0, strStatus);

        }

    }
    else
    {
        //調用[待化驗任務API(awaitLaboratory)]API失敗
        LogManager.WriteLog(LogFile.Trace, "函數timerMain_Tick:" + retDataJson["sReturn"].ToString());
    }
}
else
{
    //調用[待化驗任務API(awaitLaboratory)]API失敗
    LogManager.WriteLog(LogFile.Trace, "函數timerMain_Tick:調用[待化驗任務API(awaitLaboratory)]API失敗!返回的數據爲空!!");
}
相關文章
相關標籤/搜索