使用 Newtonsoft.Json 操作 JSON 字符串

对 Newtonsoft.Json 的应用可以说司空见惯,在 JSON 格式层级不深的情况下使用很方便,但有时遇到的 JSON 字符串层级非常多,且真正需要的数据往往都“埋”得很深,这时如果去定义一个与之对应的多层嵌套实体类就显得不划算,下面通过实例来演示如何一步到位抓取到期望的数据(集)。
一、把实体类转化为 JSON 字符串
1. 为实体类赋值
SenderFromMQSearch senderFromMQSearch = new SenderFromMQSearch();
senderFromMQSearch.StartTime = new DateTime(2017, 9, 10);
senderFromMQSearch.EndTime = new DateTime(2017, 9, 10);
senderFromMQSearch.FlowType = "DataSender";
2. 序列化
通过简单的序列化后,可以将 C# 实体类转换为 JSON 格式的字符串
string paramsText = JsonConvert.SerializeObject(senderFromMQSearch);
转换后其格式类似如下:
{\"StartTime\":\"2017-09-10\", \"EndTime\":\"2017-09-10\", \"FlowType\":\"DataSender\", \"SiteNo\":\"\"}
二、提取 JSON 字符串中部分属性的值
JSON 属性的值有多种类型,比如 String、Array 等,通过属性提取到对应的值时需要特别留意这些类型,从而做出正确地转化。
比如现借助上面的查询实体类,以及前文介绍的 Chloe.ORM 查询到一段结果集,其形式如同这样一段 JSON 字符串:
{
"Status": true,
"Msg": "成功",
"Data": {
"SiteData": [
{
"SiteNo": "200012",
"SiteName": "上海公司",
"Total": 100
},
{
"SiteNo": "214001",
"SiteName": "无锡分销部",
"Total": 200
}
]
}
}
并将该字符串存储在变量 resultText 中。
1. JObject
将其转化为 JSON 对象,即 JObject:
JObject jObj = JObject.Parse(resultText);
接着可以尝试获取"Data"属性的值:
jObj["Data"].ToString();
其值的形式为:
{
"SiteData": [
{
"SiteNo": "200012",
"SiteName": "上海公司",
"Total": 100
},
{
"SiteNo": "214001",
"SiteName": "无锡分销部",
"Total": 200
}
]
}
2. JArray
这时发现,真正期望的值其实还在属性“SiteData”里面,那不如索性一步到位:
jObj["Data"]["SiteData"].ToString();
此时,其值的形式为:
[
{
"SiteNo": "200012",
"SiteName": "上海公司",
"Total": 100
},
{
"SiteNo": "214001",
"SiteName": "无锡分销部",
"Total": 200
}
]
可见这是一个数组格式的字符串,可以尝试将其转化为数组对象,即 JArray:
JArray siteDataArray = JArray.Parse(jObj["Data"]["SiteData"].ToString());
3. JArray 转换为 List
对于该数组中的每一个对象,都存在三个属性:SiteNo、SiteName,以及 Total,为了更方便地操作这些数据,可以考虑泛型集合。
首先来定义实体类:
public class SiteInfo
{
public string SiteNo { get; set; }
public string SiteName { get; set;
public int Total { get; set; }
}
可以看出,实体类的属性实际上与数组中每一个对象的属性相对应。
接着来遍历一下这个数组,对于数组中的每一个对象都会有一个实体对象(siteInfo)与之对应,然后将该实体对象(siteInfo)逐个地添加至泛型集合(siteInfoList)即可。
List<SiteInfo> siteInfoList = new List<SiteInfo>();
foreach (var item in siteDataArray)
{
SiteInfo siteInfo = new SiteInfo();
siteInfo.SiteNo = item["SiteNo"].ToString();
siteInfo.SiteName = item["SiteName"].ToString();
siteInfo.Total = (int)item["Total"];
siteInfoList.Add(siteInfo);
}
至此,核心数据就倒腾到泛型集合中,接下来借助 Linq 就可以玩各种花样了。
使用 Newtonsoft.Json 操作 JSON 字符串的更多相关文章
- Newtonsoft.Json 操作 JSON 字符串
Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSeriali ...
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
- C#应用Newtonsoft.Json操作json
Newtonsoft.Json是一个开源的C#操作json的项目,应用起来非常简单.其github地址; 下面的代码演示了如何应用Newtonsoft.Json序列号和反序列化. using Newt ...
- C#应用Newtonsoft.Json操作json[2]-反序列化不定类型
在读json时,有时不知道对方的数据类型是什么样的,本文用Newtonsoft,把json反序列化为List>,在某种情况下还是有用的. private static List<Dicti ...
- json操作json类型转换
前提是需要加Jar包: gson-2.2.2.jar package utils; import java.io.BufferedReader;import java.io.FileInputStre ...
- C#使用Newtonsoft.Json操作json
1.下载 Newtonsoft.Json 右键引用,选择 管理NuGet程序包,选择浏览,输入log4net,然后点击下载 2.json数据的组装与解析 public class Class { pu ...
- SqlServer 操作 JSON
SqlServer 操作 JSON Intro Sql Server 从 2016 开始支持了一些 json 操作,最近的项目里也是好多地方直接用字段直接存成了 json ,需要了解一下怎么在 Sql ...
- js中的json操作
js中的json操作 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScr ...
- python使用笔记006-函数+json操作
一.函数 函数:提高代码的复用性 1.1 函数的定义 1 def hello(): 2 print('hello') 3 print('fdsfjslkfs') 4 5 #函数不调用就不会执行 6 h ...
随机推荐
- 201521123122《Java程序设计》第1周学习总结
1. 本周学习总结 因为寒假里也没有好好预习java,第一周上课还是有点懵逼. ①.了解了JVM,JRE,JDK的区别,能够熟练安装JDK. ②.编了我人生中的第一个java程序"hello ...
- 201521123005《Java程序设计》第十三周学习总结
1. 本周学习总结 1.网络基本概念 2.网络常用命令 ipconfig 查看网络配置信息,如ip地址 ping 测试网络是否连通 telnet 远程登录 ftp 登陆ftp Fport (xp下)查 ...
- 201521123085《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学 ...
- 微信小程序中发送模版消息注意事项
在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...
- Oracle总结第三篇【PLSQL】
PLSQL介绍 PLSQL是Oracle对SQL99的一种扩展,基本每一种数据库都会对SQL进行扩展,Oracle对SQL的扩展就叫做PLSQL- SQL99是什么 (1)是操作所有关系型数据库的规则 ...
- Spring - lookup-method方式实现依赖注入
引言 假设一个单例模式的bean A需要引用另外一个非单例模式的bean B,为了在我们每次引用的时候都能拿到最新的bean B,我们可以让bean A通过实现ApplicationContextWa ...
- java-annotation的简单介绍
package com.yangwei.shop.entity; /** * annotation作用 一是进行标识,二是进行约束 * *///必须让它在运行时能够执行@Retention(Reten ...
- 支持语音识别、自然语言理解的微信小程序(“遥知之”智能小秘)完整源码分享
记录自己搭建https的silk录音文件语音识别服务的调用过程,所有代码可在文中找链接打包下载 >>>>>>>>>>>>> ...
- Js前端传递json数组至服务器端并解析的实现。
最近做的一个小项目中需要将json数组数据传递到服务器端进行保存,现分享一下解决思路. 环境:EasyUi+Mvc 4.0 如下: 在上述截图中的红色圈起来的部分,需要在点击保存后通过一次ajax请求 ...
- JavaScript中的alert、confirm、prompt
alert: var a=alert('Alert');//界面只有一個確定alert(a); //返回值為undefined confirm: var c= confirm('Confirm') ...