博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 Newtonsoft.Json 操作 JSON 字符串
阅读量:7178 次
发布时间:2019-06-29

本文共 2474 字,大约阅读时间需要 8 分钟。

Markdown

对 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 等,通过属性提取到对应的值时需要特别留意这些类型,从而做出正确地转化。

比如现借助上面的查询实体类,以及介绍的 查询到一段结果集,其形式如同这样一段 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
siteInfoList = new List
();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 就可以玩各种花样了。

转载于:https://www.cnblogs.com/ramantic/p/7700266.html

你可能感兴趣的文章
SQL Server 缓存清除与内存释放
查看>>
GO 第一 变量
查看>>
C++类型转换 -- 由其他类型转换到自定义类型
查看>>
Jetson TX1 安装Kinect驱动
查看>>
706. 设计哈希映射
查看>>
SpringMVC_创建一个springmvc
查看>>
90.bower解决js的依赖管理
查看>>
String类型转Long类型需要注意的问题
查看>>
初次使用Fleck+redis订阅发布实现学习小demo
查看>>
transition & transform
查看>>
python face_recognion安装
查看>>
并查集
查看>>
1103: 零起点学算法10——求圆柱体的表面积
查看>>
ReentrantLock和Synchronized
查看>>
Struts2上传大小限制
查看>>
redis
查看>>
微信小程序tabBar
查看>>
c# WinForm英雄联盟挂机源码及实现原理
查看>>
算法笔记--二项式反演
查看>>
编译期常量字符串拼接处理
查看>>