本文转自 https://blog.csdn.net/pinebud55/article/details/52240287 感谢pinebud55分享

之前我们有讨论过c#是如何处理json的,在我的客户端中,需要接收服务端的数据,并且用列表展示出来,列表控件我采用的是winfrom自带的DataGridView,从服务端得到的响应是一串json字符串,为了提高效率和简洁代码,我不想采用解析json并填充控件的方式,而是希望将json转化为datatable,直接绑定控件.

解决方案

  1. 解析Json.我们从服务端得到的json格式如下

string response={"672":
{"id": "672",
"level":0,
"children":[
"b9185a050d0540fea32cdd6fdf5e0d7d",
"727dc5216f504174a30475f268a616f8",
"57c8e7da25a34bee832d8fd2cfeed5c1"]
},
"673":
{"id": "673",
"level":1,
"children":[
"b9185a050d0540fea32cdd6fdf5e0d7d",
"727dc5216f504174a30475f268a616f8",
"57c8e7da25a34bee832d8fd2cfeed5c1"]
}
}

参考之前文字的解析,将字符串转换为Json对象,之后转换为JProperty对象,方便之后遍历

 JObject json = JObject.Parse(response);
IEnumerable<JProperty> property = json.Properties();

2.转换为JArray对象

JObject和JProperty对象均不能转换为datatable,只有JArray可以,所以通过遍历将JProperty对象转换为JArray。

  JArray ay = new JArray();
foreach (JProperty item in property)
{
JObject child = JObject.Parse(item.Value.ToString());
ay.Add(child);
}

3.反序列化Json

得到的JArray对象实际上是一个Json的字符串数组,我们将其进行反序列化

    DataTable db=new DataTable();
db=JsonConvert.DeserializeObject<DataTable>(ay.ToString());

完整代码如下:

    JObject json = JObject.Parse(response);
IEnumerable<JProperty> property = json.Properties();
JArray ay = new JArray();
DataTable db=new DataTable();
foreach (JProperty item in property)
{
JObject child = JObject.Parse(item.Value.ToString());
ay.Add(child);
}
db=JsonConvert.DeserializeObject<DataTable>(ay.ToString());
dataGridView1.DataSource = db;

当然,也可以将datatable 对象序列化为Json

string json = JsonConvert.SerializeObject(dt);

C#客户端Json转DataTable的更多相关文章

  1. #region Json转DataTable

    #region  Json转DataTable        private DataTable Json2Dtb(string json)        {            JavaScrip ...

  2. DateTable与List<T>相互转换 及JSON与DataTable(DataSet)相互转化

    http://www.360doc.com/content/13/0712/09/10504424_299336674.shtml Linq处理List数据 http://blog.163.com/l ...

  3. C#Json转DataTable

    需求:有一个log文件,需要整理成Excel,日志文件里面的数据都是json字符串 思路是,把Json字符串转换成DataTable,然后导出到Excel 在网上找了一些资料,整理了以下三种类型的Js ...

  4. json转datatable(正则表达式的方法)

    /// <summary> /// 将json转换为DataTable /// </summary> /// <param name="strJson" ...

  5. DataTable转Json,Json转DataTable

    // 页面加载时 /// </summary> /// <param name="sender"></param> /// <param ...

  6. c# 将json转换为DataTable

    /// <summary> /// 将json转换为DataTable /// </summary> /// <param name="strJson" ...

  7. json与DataTable相互转换

    首先我们看看 Newtonsoft.Json.JsonConvert 是怎么完成的: DataTable table = new DataTable(); table.Columns.Add(&quo ...

  8. PCB MS SQL 存储过程(CLR) 实现Json转DataTable表的方法

    一.准备需转为DataTable的json字符串 原json字符串数据 [{"TechName":"ECN","TechNo":" ...

  9. JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List转JSON,JSON转List,JSON转C#对象

    一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 ...

  10. JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List<T>转JSON,JSON转List<T>,JSON转C#对象

    一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 ...

随机推荐

  1. Pylon C++ Programmer's Guide

    移步至Pylon C++ Programmer's Guide观看效果更佳 Getting Started pylon编程指南是一个关于如何使用Basler pylon C++ API进行编程的快速指 ...

  2. php字符串练习题

    把以前发给别人的练习题邮件备份记录一下 1.用php编写统计二维数组内某个字符出现的次数的一个函数.给定二维数组和字符串,返回这个字符串在二维数组中出现的次数. 例: 数组如下: $array=arr ...

  3. Deque的应用案例-回文检查

    7.Deque的应用案例-回文检查 回文检测:设计程序,检测一个字符串是否为回文. 回文:回文是一个字符串,读取首尾相同的字符,例如,radar toot madam. 分析:该问题的解决方案将使用 ...

  4. mysql与mongodb、redis的性能对比,包含源代码

    最近因为工作需要,所以研究了一下mongodb,但是不知道它的真实性能怎么样,所以对比mysql做了一些测试,现在只是插入操作,更新还没来得及弄,贴出来和大家分享一下(已经补齐redis部分) 1.数 ...

  5. Redis常见问题汇总

    日常使用中Redis中配到的问题汇总 1. RedisDesktopManager提示:Connection error: QRedisClient compiled without ssh supp ...

  6. WPF下,控件未响应鼠标属性触发器

    WPF下,控件未响应鼠标属性触发器 记一次自定义控件调试 问题现象 问题分析 解决方式 记一次自定义控件调试 使用WPF写了个自定义控件,其中有个Button按钮,重写了样式模板 <Button ...

  7. 08C++选择结构(2)——教学

    一.逻辑变量 教学视频 存储类似灯亮或灯灭.是男还是女等结果只有两种可能的数据时,可以使用逻辑型变量. 逻辑型变量用关键字bool定义,所以又称为布尔变量,其值只有两个false(假)和true(真) ...

  8. django推导流程

    目录 一.纯手撸web框架 二.基于wsgiref模块 三.代码封装优化 四.动静态网页 五.jinja2模块 六.前端.后端.数据库三者联动 一.纯手撸web框架 1.web框架的本质 理解1:连接 ...

  9. 黑苹果(Hackintosh) - 问题,虚拟机中的黑苹果系统分辨率低,界面小

    问题截图 解决办法 先把 draw.iso 放进 VMware 的安装根目录 再设置 Mac OS 虚拟机系统的配置情况 如果实在不行 就使用 VM 的拉伸显示功能吧,就将就着用用

  10. docker容器间互相访问 docker bridge网络

    方式一.虚拟ip访问安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间可以根据ip互相访问. [root@33fcf82ab4dd / ...