注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一车,一房,一个温暖家

10万左右的车,80平方的房子,这是我奋斗的暖暖的家

 
 
 

日志

 
 

引用 C#解析json的几种方式   

2015-06-20 15:16:16|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自中国的希特勒《C#解析json的几种方式》

son格式的数据是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)


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)

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 = new JavaScriptSerializer().Serialize(persons);
  评论这张
 
阅读(3)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018