//*调用服务器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. equals与hashCode

    当我们需要将自己的类存入HashMap或HashSet时一般都要重写其equals与hashCode方法,但在重写时要符合规范否则会出问题. 1.equals方法 首先equals方法需要满足如下几点 ...

  2. 使用Arduino开发板和ESP8266从互联网读取数据

    ESP8266-01是一款很强大的模块,可以满足我们任何IOT项目的需求.自发布以来,它已经形成了一个很强大的群体,并演变成一个易于使用.价格低廉且功能强大的Wi-Fi模块.另一个更受欢迎的开源平台是 ...

  3. 使用laravel jwt-auth post提交数据一直出现 'error' => 'invalid_credentials'

    注意,laravel 对密码使用Hash加密,检查一下数据库user表中的password有没有Hash加密过 没仔细看文档坑死我了

  4. Kotlin反射实践操作详解

    继续对反射进行实战. 获取构造方法: 先定义一个主构造方法,2个次构造方法,接下来咱们用反射来获取一下构造方法: 其结果: [fun <init>(kotlin.Int, kotlin.S ...

  5. C++学习 ---- 系列文章

    C++ 第十二课 其它标准C函数 C++ 第十一课 标准c内存函数 C++ 第十课:标准c时间与日期函数 C++ 第九课 标准c数学函数 C++ 第八课 标准c字符和字符串 C++ 第七课 标准 C ...

  6. selenium获取元素信息方法(转载)

    1.获取当前页面的Url函数 方法:current_url 实例: driver.current_url 2.获取元素坐标 方法:location 解释:首先查找到你要获取元素的,然后调用locati ...

  7. 项目Alpha冲刺--9/10

    项目Alpha冲刺--9/10 作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 项目Alpha冲刺 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合 ...

  8. Laravel —— batch 实现

    很多项目中会用到自动执行脚本的功能, 例如,自动统计上个月的注册用户,定时生成 csv 文件并邮箱发送给客户等等. Laravel 中的任务调度,可实现定时任务, 结合自定义 artisan 命令,即 ...

  9. 神奇的 Object.defineProperty 解释说明

    原文 : https://segmentfault.com/a/1190000004346467?utm_source=tuicool&utm_medium=referral 这个方法了不起啊 ...

  10. 如何使用 淘宝 NPM 镜像

    淘宝 NPM 镜像 原文链接 http://npm.taobao.org/ 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同 ...