//*调用服务器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()) > )
{
//*调用服务器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(, 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失败!返回的数据为空!!");
}

C# Newtonsoft.Json解析json字符串处理 - JToken 用法的更多相关文章

  1. .Net利用Newtonsoft进行解析Json的快捷方法

    现在异构系统之间的数据交换多采用Json格式 .Net如何快捷地解析Json和将Object转换成json呢? 1.利用Newtonsoft解析Json字符串 在百度上查找资料,利用Newtonsof ...

  2. json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。

    json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...

  3. Json转model对象,model转json,解析json字符串

    GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...

  4. 一、JSON解析与字符串化

    JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 filter,指定要序列化的 ...

  5. c# 使用Newtonsoft.Json解析JSON数组

    一.获取JSon中某个项的值 要解析格式: [{"VBELN":"10","POSNR":"10","RET_ ...

  6. C# Json解析Json = "{\"EX_RETURN\":[{\"MATNR\":\"test\"}] }";

    string jtext = "{\"jiangsu\":[{\"wuxi\":\"无锡\"},{\"suzhou\&q ...

  7. 认识Json解析json生成json

    .markdown-body hr::after,.markdown-body::after { clear: both } .loopLine,.messageLine0 { } .markdown ...

  8. Newtonsoft.Json解析json字符串和写json字符串

    写: StringWriter sw = new StringWriter(); JsonWriter writer = new JsonWriter(sw); //如果报错则使用JsonWriter ...

  9. C# Newtonsoft.Json解析json字符串处理(最清晰易懂的方法)

    需求: 假设有如下json字符串: { ", "employees": [ { "firstName": "Bill", &quo ...

随机推荐

  1. 剖析和解决Python中网络粘包的正确姿势

    目录 1.粘包及其成因 1.1.粘包产生 1.2.粘包产生的原因 2.尝试解决粘包 2.1.指定数据包的长度 2.2.固定数据包的长度 2.3.用函数实现多次调用发送数据 3.解决粘包问题的正确姿势 ...

  2. ELK-Elasticsearch 基础使用

    一.基本概念 1 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例.单个 Elastic 实例称为一个节点( ...

  3. nginx: [error] invalid PID number "" in "/run/nginx.pid"

    在重启云主机(系统)之后,执行 nginx -t 是OK的,然而在执行 nginx -s reload 的时候报错 nginx: [error] invalid PID number “” in “/ ...

  4. CentOS7安装Chrome

    1. 进入官网:https://www.google.cn/intl/zh-CN/chrome/2. 点击下载3. 直接安装:sudo yum localinstall google-chrome-s ...

  5. BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...

  6. test20190905 ChiTongZ

    100+22+90=212.前两道题不错,但T3 没什么意义. 围观刘老爷超强 T1 解法. ChiTongZ的水题赛 [题目简介] 我本可以容忍黑暗,如果我不曾见过太阳. 考试内容略有超纲,不超纲的 ...

  7. Backpressure & Elastic Scaling

    spark.streaming从不稳定到稳定状态,解决数据量接收数据时突然变大,使得无法及时处理数据,稳定性得到保证 开启方式: spark.streaming.backpressure.enable ...

  8. Maven和Ajax

    ****************使用maven构建项目******************** 一个maven项目必须要有一个pom文件. maven中常用的命令: 在使用mvn archetype: ...

  9. python的numpy.array

    为什么要用numpy Python中提供了list容器,可以当作数组使用.但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3].就需要三个指针和三 ...

  10. 三.Python变量,常量,注释

    1. 运行python代码. 在d盘下创建一个t1.py文件内容是: print('hello world') 打开windows命令行输入cmd,确定后 写入代码python d:t1.py 您已经 ...