C#解析json的几种方式

json格式的数据是javascript原生的一种数据格式,比xml更简洁。

它有两种形式:json对象和json对象数组。 

在此之前,有必要解释几个基本概念:

json字符串,就是string,它一定是由双引号包起来的,如"{'name':'jerry'}"。这是一个string,尽管去掉双引号后它就是一个json对象。

json对象,就是以大括号开头的对象,如{"name":"jerry"}; 而获取name值的方式就是 json.name 或者 json["name"];

json数组,就是以中括号开头的json对象数组,如[{"name":"tom"},{"name":"jerry"}];获取值的方式是 json[0].name 或 json[0]["name"]; //这里取第一个name

搞清楚基本概念后,理解起来就容易了。

而把符合json格式的string,转换成json对象并提取其中值的方法,就是本文要重点介绍的。

(一):引用 newtonsoft.json.linq命名空间

json对象

在C#中可以,利用其JObject类进行一些操作:

string json = "{'name':'terry','age':'21'}";
JObject jsonObj = JObject.Parse(json); //尝试将字符串转换成json对象
string name = jsonObj["name"]; //在js中习惯用jsonObj.name,这里不行
string age = jsonObj["age"];
Response.Write(name + "<br />" + age);

json数组

类似JObject,这里借助JArray类:

string json = "[{'name':'tom'},{'name':'jerry'},8,10]";
JArray arr = JArray.Parse(json); //尝试将字符串转换成json数组
Response.Write(arr[1]["name"]); //输出jerry

其实这个json数组很奇怪,第三个和第四个没有键值对了,就一个值,也是可以解析的:

Response.Write( arr[3] );   //输出10

(二):引用 newtonsoft.json命名空间

1.需要建立与json相对应的类:

 public class Person
 {
      public string Name { get; set; }
      public int Age { get; set; }
 }

2.string转对象

string json = "{'Name':'tom','Age':'21'}";
Person p = JsonConvert.DeserializeObject<Person>(json); //将字符串转换成json对象
Response.Write(p.Name); //输出tom.这里不能p["Name"]

  3.string转数组

string json = "[{'Name':'a','Age':1},{'Name':'b','Age':2}]";
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json);//用List作为容器装Person数组
Response.Write(persons[0].Name); //输出a.这里不能persons[0]["Name"]

这个把string转换成对象或者数组的过程,叫做反序列化。

 

说到反序列化,顺便提一下序列化。

序列化,指把对象和数组变为字符串的过程。

例1.

Person p = new Person(){Name="jerry" , Age=23};
string json = JsonConvert.SerializeObject(p);

例2.

List<Person> persons=new List<Person>()
 {
      new Person(){ Name="a",Age=1},
      new Person(){ Name="b",Age=2},
      new Person(){ Name="c",Age=3},
      new Person(){ Name="d",Age=4}
 };
string json = JsonConvert.SerializeObject(persons)

 这里不区分JArray和JObject,都是用JsonConvert.SerializeObject()方法;

posted @   每天进步多一点  阅读(2591)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
历史上的今天:
2022-05-30 有趣的css—隐藏元素的7种思路
2016-05-30 Sql 行转列、列转行及分页
2016-05-30 C#中问号的使用
点击右上角即可分享
微信分享提示