• C# Newtonsoft.Json解析json字符串处理


    //*调用服务器API(获取可以处理的文件)
    //1、使用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")
        {
    
            //2、调用化验任务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(上传文件)
                        //3、如果匹配成功后上传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失败!返回的数据为空!!");
    }
  • 相关阅读:
    解决git推不上去1
    django中CBV源码分析
    Form和ModelForm组件
    jquery操作cookie
    django中的中间件
    django中ORM中锁和事务
    django_ajax
    docker安装jenkins 容器,集成python环境
    支付宝第三方支付
    redis基本使用
  • 原文地址:https://www.cnblogs.com/zouhao/p/11420145.html
Copyright © 2020-2023  润新知