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. IOS &#39;NSInternalInconsistencyException&#39;

    今天想写一个请求的天气.好的.废话不多说.先贴代码: 使用AFNetWorking 发送get请求,可是一直报错  IOS 'NSInternalInconsistencyException', re ...

  2. Android - TextureView, SurfaceView和GLSurfaceView 以及 SurfaceTexture

    这几个概念比较绕, 又比较相近. 初看比较糊涂, 把握关键点就好. 关键字 View SurfaceViewGLSurfaceViewTextureView这三个后缀都是View, 所以这三个东西都是 ...

  3. lightoj--1116--Ekka Dokka(水题)

    Ekka Dokka Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Stat ...

  4. poj--1237--Drainage Ditches(最大流)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %I64d & %I64u Sub ...

  5. scikit-learn 为机器学习

    如何使用 scikit-learn 为机器学习准备文本数据   欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 文本数据需要特殊处理,然后才能开始将其用于预测建模. 我们需要解析文本,以删除被 ...

  6. Vsftp权限控制(持续增加中)

    把用户限制在自己的home目录中,例如限制用户Leon只能访问/home/Leon目录下的文件,不允许访问上级目录. 先打开配置文件 vi /etc/vsftpd/vsftpd.conf 第一种方法: ...

  7. 轻量级记事本工具:CintaNotes

    本片文章介绍CintaNotes小工具 功能介绍: 方便.快捷的记录笔记: 快捷地从任何地方等截取内容生成笔记: 高效的记事本内容查询: 轻松的标签管理 支持移动设备和电脑同步(估计要收费) 官网下载 ...

  8. Visual studio 之常见编译错误(1):syntax error : missing ';' before identifier 'PVOID64'

    来自博客:http://blog.csdn.net/chenyusiyuan/article/details/4643313的总结: 一般可通过调整 DirectShow/Include 在 Tool ...

  9. java.sql.SQLException:错误 The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

    错误 方法 添加后面的内容即可

  10. Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等

    一.用户创建.权限.删除 1.连接MySql操作 连接:mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 打开cmd, ...