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. sql暂时表的创建

    create table #simple  /*仅仅对当前用户有效.其它用户无法使用,断掉连接后马上销毁该表*/ ( id int not null ) select * from #simple c ...

  2. ios 文件上传, post数据

    转自:http://www.maxiaoguo.com/clothes/267.html 一.文件下载 获取资源文件大小有两张方式 1. HTTP HEAD方法 NSMutableURLRequest ...

  3. sass02

    新建一个文件夹 1 cd 进入文件夹 ,cd E:\360data\重要数据\桌面\sass, 2 compass creat hello:当前目录创建sass工程, 3 sass文件夹放置sass文 ...

  4. java内部类的初始化

    public class InnerClassTest { /** * @param args */ public static void main(String[] args) { // TODO  ...

  5. HMACSHA256 Class

    https://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha256(v=vs.110).aspx Comp ...

  6. 如何判断自己IP是内网IP还是外网IP

    tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255  172.16.0.0/12:172.16.0.0- ...

  7. .Net经典笔试题

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答:private:私有成员,在类的内部才可以访问: protected:保护成员,该类内部和 ...

  8. 暑假集训-WHUST 2015 Summer Contest #0.1

    ID Origin Title   4 / 12 Problem A Gym 100589A Queries on the Tree 14 / 41 Problem B Gym 100589B Cou ...

  9. Android的SQLite的增删查改

    原创作品,允许转载,转载时请务必声明作者信息和本声明.http://www.cnblogs.com/zhu520/p/8343675.html 本人小白,那个大神看到有问题可指出,谢谢.... 一:s ...

  10. Java Web学习总结(10)——Session详解

    摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术.本文将详细讨论session的工作机制并且对在Java ...