//*调用服务器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. 爬虫之scrapy框架应用selenium

    一.利用selenium 爬取 网易军事新闻 使用流程: ''' 在scrapy中使用selenium的编码流程: 1.在spider的构造方法中创建一个浏览器对象(作为当前spider的一个属性) ...

  2. VLAN实验5:利用三层交换机实现VLAN间路由

    实验环境: 实验拓扑图:   实验编址: 实验步骤:1.基本配置按照实验编址表在PC上进行基本的IP地址配置,三层交换机上先不做任何配置. 测试PC1与PC2的连通性 正常 测试PC1与PC3的连通性 ...

  3. subprocess模块的使用注意

    subprocess.Popen()函数 语法格式: subprocess.Popen(arg,stdin=None,stdout=None,stderr=None,shell=False) 1.主要 ...

  4. Linux必知必会--grep

    花更少的时间,去验证一件事情:你到底是富翁,还是贫民. --一位历经沧桑的炒客 转自:https://man.linuxde.net/grep grep命令 grep(global search re ...

  5. C#将文件转成16进制码流写入数据库存起来,访问的时候再还原成PDF文件。

    转自https://blog.csdn.net/liubowei_0312/article/details/53378146 适合将文件写入数据库,远程访问的时候还原1.首先把文件转成十六进制文件流 ...

  6. C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracle数据库

    在刚接触C#的时候由于公司使用的就是Oracle数据库,那么C#怎么连接Oracle数据库就成了首要去掌握的知识点了.在那时没有ODP.NET,但visual studio却对Oralce数据库的调用 ...

  7. python写入csv

    import xlwtimport csvnewfile=open("wu.csv","w",newline="")filewriter=c ...

  8. 2019.12.09 Scanner类(用户输入数据----引用数据类型)

    创建:数据类型   变量名   =   new   数据类型(): 引用:变量名.方法名(): //导包import java.util.Scanner;class Demo01{ public st ...

  9. Linux常用命令合集

    常用命令合集 命令选项和参数 Linux中的命令格式为:command [options] [arguments]  //中括号表示可选的,即有些命令不需要选项也不需要参数,但有的命令在运行时需要多个 ...

  10. CSS文本元素

    一.属性 font-size:16px;  文字大小 Font-weight: 700 ;   值从100-900,文字粗细,不推荐使用font-weight:bold; Font-family:微软 ...