//*调用服务器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. 用cmake构建gtk程序

    情况说明 先前已经在windows下基于GDI实现了一个简陋的imshow:基于GDI的imshow:使用stb_image读取图像并修正绘制.考虑跨平台,也考虑万一某天M$不让我们用盗版系统了,还是 ...

  2. C/C++调试:gdbserver的简单使用

    1.角色:host和target host是运行gdb的机器 target是运行gdbserver的机器 gdbserver提供一个网络服务,gdb remote到gdbserver上后进行调试 2. ...

  3. 在Ubuntu系统下连接远程服务器并传输文件

      原文链接:https://blog.csdn.net/u013250416/article/details/78075590 一. 连接远程Ubuntu服务器. 1. 打开命令行,输入 : sud ...

  4. Fuel

    1. fuel简介 fuel是Mirantis公司提供的一款开源的自动化安装部署OpenStack的工具.为OpenStack相关的社区项目和插件的部署和管理提供了一种直观的GUI驱动体验. Fuel ...

  5. anyproxy学习4-Linux(Centos)搭建anyproxy环境

    前言 anyproxy可以跨平台使用,前面第一篇是搭建在windows机器上,本篇讲如何在linux上搭建anyproxy环境,当然有mac的小伙伴也可以用mac去搭建一个环境. nodejs安装 a ...

  6. List.Sort

    static void Main(string[] args) { List<double> valuesList = new List<double>(); valuesLi ...

  7. MySql添加字段命令

    使用ALTER TABLE命令来向一个表添加字段,示例如下: -- 向t_user表添加user_age字段 ) DEFAULT NULL COMMENT '年龄' AFTER user_email; ...

  8. LightOJ - 1333 - Grid Coloring

    链接: https://vjudge.net/problem/LightOJ-1333 题意: You have to color an M x N two dimensional grid. You ...

  9. LeetCode 1049. Last Stone Weight II

    原题链接在这里:https://leetcode.com/problems/last-stone-weight-ii/ 题目: We have a collection of rocks, each ...

  10. WinDbg常用命令系列---||(系统状态)

    ||(系统状态) 简介 双竖线 ( || ) 命令将打印指定的系统或当前正在调试的所有系统的状态. 使用形式 || System 参数 System 指定要显示的系统. 如果省略此参数,将显示正在调试 ...