C# Newtonsoft.Json解析json字符串处理 - JToken 用法
//*调用服务器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 用法的更多相关文章
- .Net利用Newtonsoft进行解析Json的快捷方法
现在异构系统之间的数据交换多采用Json格式 .Net如何快捷地解析Json和将Object转换成json呢? 1.利用Newtonsoft解析Json字符串 在百度上查找资料,利用Newtonsof ...
- json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。
json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...
- Json转model对象,model转json,解析json字符串
GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...
- 一、JSON解析与字符串化
JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 filter,指定要序列化的 ...
- c# 使用Newtonsoft.Json解析JSON数组
一.获取JSon中某个项的值 要解析格式: [{"VBELN":"10","POSNR":"10","RET_ ...
- C# Json解析Json = "{\"EX_RETURN\":[{\"MATNR\":\"test\"}] }";
string jtext = "{\"jiangsu\":[{\"wuxi\":\"无锡\"},{\"suzhou\&q ...
- 认识Json解析json生成json
.markdown-body hr::after,.markdown-body::after { clear: both } .loopLine,.messageLine0 { } .markdown ...
- Newtonsoft.Json解析json字符串和写json字符串
写: StringWriter sw = new StringWriter(); JsonWriter writer = new JsonWriter(sw); //如果报错则使用JsonWriter ...
- C# Newtonsoft.Json解析json字符串处理(最清晰易懂的方法)
需求: 假设有如下json字符串: { ", "employees": [ { "firstName": "Bill", &quo ...
随机推荐
- MySQL创建用户和加限权
目录 1.权限管理 1.1对新用户增删改 1.2对当前的用户授权管理 1.权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete ...
- Linux命令——blkid
简介 blkid用于查看块设备UUID.Label.挂载.文件系统类型等信息 选项参数 无参数——显示所有已挂载分区信息 查看特定分区 -s:指定输出信息(UUID.TYPE.LABEL.PTTYPE ...
- kubernetes里面的GC--转发
什么是GC GC 是 Garbage Collector 的简称.从功能层面上来说,它和编程语言当中的「GC」 基本上是一样的.它清理 Kubernetes 中「符合特定条件」的 Resource O ...
- Mariadb/MySQL多实例实战
Mariadb/MySQL多实例实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装MySQL程序 无论你喜欢哪种方式安装均可,关于源码安装,yum安装或者二进制安装,可以 ...
- 动态规划——背包问题python实现(01背包、完全背包、多重背包)
目录 01背包问题 完全背包问题 多重背包问题 参考: 背包九讲--哔哩哔哩 背包九讲 01背包问题 01背包问题 描述: 有N件物品和一个容量为V的背包. 第i件物品的体积是vi,价值是wi. 求解 ...
- python的tkinter,能画什么图?
今天从下午忙到现在,睡觉. 这个能绘点图的. import json import tkinter as tk from tkinter import filedialog from tkinter ...
- 2019年牛客多校第一场 E题 ABBA DP
题目链接 传送门 思路 首先我们知道\('A'\)在放了\(n\)个位置里面是没有约束的,\('B'\)在放了\(m\)个位置里面也是没有约束的,其他情况见下面情况讨论. \(dp[i][j]\)表示 ...
- MySQL数据的优化方案
一.选取最使用的字段属性 mysql可以使用的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快,因此在创建表的时候,为了获得更好的性能,我们可以将表中的字段的宽度尽量设 ...
- PHP——仿造微信OpenId
前言 这就是拿来玩的,其次假的就是假的,成不了真的! 代码 首先我观察了两个公众号关注后的生成openid的规则,发现了以下规则 1. OpenID都是28位 2. 前六位是有规律的 然后接下来就按着 ...
- Git学习笔记--实践(三)
文中红色的文字(标为:## 插曲)是在Git学习/实践过程中,我个人遇到的一些问题,每个“## 插曲”之后,都有相应的解决方案. 一.创建版本库 版本库又名仓库,英文名repository,可简单的理 ...