C# json 总结
json格式字符串转换为实体类,大括号 {} 表示对象,[] 数组表示列表。
json文件读取到内存中就是字符串,.NET操作json就是生成与解析json字符串。
添加引用:using Newtonsoft.Json;
一、静态
1、解析json字符串(转)
(1)普通格式的json字符串的解析
string jsonText = "{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["zone"].ToString();
string zone_en = jo["zone_en"].ToString();
(2)嵌套格式的json字符串的解析
string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["beijing"]["zone"].ToString();
string zone_en = jo["beijing"]["zone_en"].ToString();
(3)数组格式的json字符串的解析
string jsonArrayText = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]"; //"[{'a':'a1','b':'b1'}]即使只有一个元素,也需要加上[]
string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]"; //上面写法和此写法效果一样
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);//jsonArrayText必须是带[]数组格式字符串
string str = jArray[0]["a"].ToString();

(4)JObject.Parse解析
string json = @"{
CPU: 'Intel',
Drives: [
{
DVD:'DVD read/writer',
hard:'500 gigabyte hard drive'
}
]
}";
JObject jo = JObject.Parse(json);
// JObject是JToken的父类,直接使用JToken比较好用
// JToken jo = JToken.Parse(json);
JArray jArray = JArray.Parse(jo["Drives"].ToString());
string CPU = jo["CPU"].ToString();
string DVD = jArray[0]["DVD"].ToString();
(4)Linq to JSON
string jsonStr = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";
//将json转换为JObject
JObject jsonObj = JObject.Parse(jsonStr );
Console.WriteLine(jsonObj ["Name"]);
var names = from staff in jsonObj ["Colleagues"].Children()
select (string)staff["Name"];
foreach (var name in names)
Console.WriteLine(name);
foreach (var colleague in jObj["Colleagues"])
{
Console.WriteLine(colleague["Name"]);
Console.WriteLine(colleague["Age"]);
}
Console.ReadLine();
(5)SelectToken
string jsonStr = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";
//将json转换为JObject
JObject jObj = JObject.Parse(jsonStr );
JToken nameJT = jsonStr .SelectToken("Name");
Console.WriteLine(nameJT.ToString());
var names = jsonStr .SelectToken("Colleagues").Select(p => p["Name"]).ToList();
foreach (var name in names)
Console.WriteLine(name.ToString());
Console.ReadLine();
2、生成json字符串
(1)Datatable 和 Dataset 转换成JSON 字符串
string jsonText=string.Empty;
jsonText= JsonConvert.SerializeObject(Datatable);
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss"};
string hisListJson = JsonConvert.SerializeObject(hisDataList.Tables[0],Formatting.Indented,timeConverter);
JsonConvert 转DateTime类型为json 带T
https://blog.csdn.net/chanelwtt/article/details/86590173
把只有一行的datable转为json字符串
去掉首尾的 '[' 和 ']'即可:
string oneJsonText = jsonText.Trim(new char[] { '[', ']', ' '});
(2)使用Newtonsoft.Json生成json字符串
https://blog.csdn.net/baidu_29994443/article/details/78115357
二、动态
1、JToken动态解析
// 1. 完整的json解析
string jsonString1 = "{\"Name\":\"小苹果\",\"Company\":\"韩国公司\",\"Entered\":\"2016-11-26 00:14\"}";
dynamic json1 = JToken.Parse(jsonString1) as dynamic;
string name1 = json1.Name;
string company1 = json1.Company;
string entered1 = json1.Entered;
// 2. 部分的json动态解析
string jsonString2 = "{\"Name\":\"小苹果\",\"Company\":\"韩国公司\"}";
dynamic json2 = JToken.Parse(jsonString2) as dynamic;
string name2 = json2.Name;
string company2 = json2.Company;
string entered2 = json2.Entered;// 若jsonStrign2 中没有Entered字段,则解析的entered2为空。
// 3. 数组格式的josn,同样可以部分动态解析
string json = @"{
CPU: 'Intel',
Drives: [
{
DVD:'DVD read/writer',
hard:'500 gigabyte hard drive'
}
]
}";
dynamic dyjson = JToken.Parse(json) as dynamic;
string CPU = dyjson.CPU;
JArray Drives = dyjson.Drives;
// JToken Drives = dyjson.Drives;
string hard = Drives[0]["hard"].ToString();
https://www.cnblogs.com/mdzz-1992/p/7116549.html
2、使用JsonReader读Json字符串
string jsonText = @"{""input"" : ""value"",""output"" : ""result""}";
JsonReader reader = new JsonTextReader(new StringReader(jsonText));
while (reader.Read())
{
Console.WriteLine(reader.TokenType + "\t\t" + reader.ValueType + "\t\t" + reader.Value);
}
3、使用JsonWriter写json字符串:
StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw);
writer.WriteStartObject();
writer.WritePropertyName("input");
writer.WriteValue("value");
writer.WritePropertyName("output");
writer.WriteValue("result");
writer.WriteEndObject();
writer.Flush();
string jsonText = sw.GetStringBuilder().ToString();
Console.WriteLine(jsonText);
4、JToken解析动态json数据、遍历、查找(转)
C# JToken类的使用,实现解析动态json数据、遍历、查找
C# json 总结的更多相关文章
- 使用TSQL查询和更新 JSON 数据
JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
- JSON.parse()和JSON.stringify()
1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...
- json与JavaScript对象互换
1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
- WebApi接口 - 响应输出xml和json
格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...
随机推荐
- Using a Plugin
创建hello.world <?xml version="1.0"?> <sdf version="1.4"> <world na ...
- [递推+dfs]ZOJ 3436. July Number
题目大意: 将一个数字的相邻两位的差(的绝对值)组成一个新的数字.不断反复.假设最后得到7,就称这个数为July Number,比方9024 – 922 – 70 – 7. 题目要求1e9范围内给定区 ...
- Spark修炼之道(高级篇)——Spark源代码阅读:第十二节 Spark SQL 处理流程分析
作者:周志湖 以下的代码演示了通过Case Class进行表Schema定义的样例: // sc is an existing SparkContext. val sqlContext = new o ...
- vijos - P1176奇怪的数列 (递归 + 找规律)
P1176奇怪的数列 Accepted 标签:[显示标签] 背景 一天.学军数学小组的成员遇到了一个奇怪的数列,正巧信息小组的你碰到了他们. 于是他们把这个数列展示给你-- 描写叙述 这个数列是这种: ...
- 记一次httpclient Connection reset问题定位
问题:某业务系统在运行一段时间后,某个API一定概率偶现Connection reset现象. 问题定位: 首先想到的是要本地复现出这个问题,但一直复现不出来. 1.根据线上问题相关日志判断应该是有部 ...
- Function的一些结论与eval函数.
1.1 函数的创建方式 1 函数声明 2 函数表达式 3 new Function // 1 function foo() {} // 2 var foo = function() {}; // 3 ...
- Android 数据库框架总结,总有一个适合你!
一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...
- Container详解
Container是一个拥有绘制.定位.调整大小的widget. padding和margin padding和margin分别设置Container的内边距和外边距.可取值包括下面四个: EdgeI ...
- 路径+DataRow+SqlPara防止sql注入
绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入system32\c ...
- Windows10上使用windbg调试Chromium Windows。
###目的###Windows10上使用windbg调试Chromium Windows. 安装Windows 10 SDK时, 就包含了windbg.exe."C:\Program Fil ...