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的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...
随机推荐
- Android——4.2 - 3G移植之路之 APN (五)
APN,这东西对于刚接触的人来说并非那么好理解.对于3G移植上网不可缺少,这里记录一下. 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/detail ...
- (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
题目: The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- ZOJ 1654 Place the Robots (二分匹配 )
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=654 Robert is a famous engineer. One ...
- ubuntu下安装RemixOS双系统(Android x86)
这篇文章主要讲在怎样在ubuntu下安装RemixOS pc版(Android x86版本号),下面两种做法的思路都适合安装不论什么版本号的Android x86版本号到ubuntu系统上,仅仅须要改 ...
- jquery 表单重置通用方法
$("#form_id").find(":input").not(":button,:submit,:reset,:hidden").val ...
- ADO.NET数据读取封装
public class sqlserver { //private string sqlstr = System.ConfigurationManager.ConnectionStrings[&qu ...
- main函数argc,argv操作
使用main(int argc, char *argv[])==main(int argc, char **argv)的基本操作是linux编程的最基本的一步,在windows下也是exe脱离IDE运 ...
- 在navicat中如何新建连接数据库
前几天给大家分享了如何安装Navicat,没有来得及上车的小伙伴可以戳这篇文章:手把手教你安装Navicat——靠谱的Navicat安装教程.今天给大家分享一下Navicat的简单使用教程,具体的教程 ...
- MyEclipse的代码自动提示功能
一般默认情况下,Eclipse ,MyEclipse的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...
- 彻底分析虚拟视频驱动vivi(三)
在Ubuntu系统中接上usb摄像头设备时,系统会自动安装对应的usb设备驱动程序.我们现在要使用自己编译的vivi驱动,该怎么办呢? 1.先安装系统自带的vivi驱动和它所依赖的所有驱动:sudo ...