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 总结的更多相关文章

  1. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  2. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  4. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  5. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  6. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  7. JSON.parse()和JSON.stringify()

    1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...

  8. json与JavaScript对象互换

    1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...

  9. .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

    去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...

  10. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

随机推荐

  1. Using a Plugin

    创建hello.world <?xml version="1.0"?> <sdf version="1.4"> <world na ...

  2. [递推+dfs]ZOJ 3436. July Number

    题目大意: 将一个数字的相邻两位的差(的绝对值)组成一个新的数字.不断反复.假设最后得到7,就称这个数为July Number,比方9024 – 922 – 70 – 7. 题目要求1e9范围内给定区 ...

  3. Spark修炼之道(高级篇)——Spark源代码阅读:第十二节 Spark SQL 处理流程分析

    作者:周志湖 以下的代码演示了通过Case Class进行表Schema定义的样例: // sc is an existing SparkContext. val sqlContext = new o ...

  4. vijos - P1176奇怪的数列 (递归 + 找规律)

    P1176奇怪的数列 Accepted 标签:[显示标签] 背景 一天.学军数学小组的成员遇到了一个奇怪的数列,正巧信息小组的你碰到了他们. 于是他们把这个数列展示给你-- 描写叙述 这个数列是这种: ...

  5. 记一次httpclient Connection reset问题定位

    问题:某业务系统在运行一段时间后,某个API一定概率偶现Connection reset现象. 问题定位: 首先想到的是要本地复现出这个问题,但一直复现不出来. 1.根据线上问题相关日志判断应该是有部 ...

  6. Function的一些结论与eval函数.

    1.1 函数的创建方式 1 函数声明 2 函数表达式 3 new Function // 1 function foo() {} // 2 var foo = function() {}; // 3 ...

  7. Android 数据库框架总结,总有一个适合你!

    一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...

  8. Container详解

    Container是一个拥有绘制.定位.调整大小的widget. padding和margin padding和margin分别设置Container的内边距和外边距.可取值包括下面四个: EdgeI ...

  9. 路径+DataRow+SqlPara防止sql注入

    绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入system32\c ...

  10. Windows10上使用windbg调试Chromium Windows。

    ###目的###Windows10上使用windbg调试Chromium Windows. 安装Windows 10 SDK时, 就包含了windbg.exe."C:\Program Fil ...