C#解析json的幾種方式

每天进步多一点發表於2024-05-30

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()方法;

相關文章