關(guān)于Json數(shù)據(jù)在開發(fā)中的重要性,自然不言而喻;
本篇通過兩種在c#中常用的方式來實(shí)現(xiàn)對(duì)Json數(shù)據(jù)的序列化和反序列化,為了實(shí)現(xiàn)大多數(shù)的需求,我們采用稍微復(fù)雜一點(diǎn)的數(shù)據(jù)模型。
首先我們有以下json數(shù)據(jù)
{ "name": "張三", "age": 20, "idCard": "123456789", "birthday": "2021-01-01 00:00:00", "hobbys": [ { "sort": 1, "desc": "寫字" }, { "sort": 2, "desc": "游泳" } ]}
然后我們根據(jù)json的結(jié)構(gòu)創(chuàng)建一個(gè)實(shí)體類
private class Studet{ public string name { get; set; } public int age { get; set; } public string idCard { get; set; } public DateTime birthday { get; set; } public List<hobby> hobbys { get; set; }}private class hobby{ public int sort { get; set; } public string desc { get; set; }}
第一種方式:JavaScriptSerializer
//需添加引用:System.Web.Extensions
//需導(dǎo)入命名空間:using System.Web.Script.Serialization;
//json.txt中的數(shù)據(jù)為上面的json數(shù)據(jù)
string json = File.ReadAllText("d:\\json.txt");
JavaScriptSerializer jss = new JavaScriptSerializer();
//反序列化成Studet對(duì)象
Studet student = jss.Deserialize<Studet>(json);
//然后就可以直接用操作對(duì)象的方法直接點(diǎn)出來就行
//輸出:張三
Console.WriteLine(student.name);
//同樣的,我們可以將上面的對(duì)象序列化成一個(gè)json數(shù)據(jù)
//序列化成json
string resultJson = jss.Serialize(student);
Console.WriteLine(resultJson);
第二種方式:JSON.NET
//需添加引用:Newtonsoft.Json
//需導(dǎo)入命名空間:using Newtonsoft.Json; using Newtonsoft.Json.Linq;
//反序列化成對(duì)象
Studet student = JsonConvert.DeserializeObject<Studet>(json);
//輸出:張三
Console.WriteLine(student.name);
//序列化成json
string resultJson = JsonConvert.SerializeObject(student);
Console.WriteLine(resultJson);
以上是我們通過json結(jié)構(gòu)映射實(shí)體類的方式去實(shí)現(xiàn)的解析json數(shù)據(jù),很多時(shí)候我們可能并不需要,或者并不想創(chuàng)建太多的類,這時(shí)候我們可以通過以下方式去實(shí)現(xiàn)解析
//使用JObject(JSON.NET)
//反序列化成JObject
JObject jobj = JObject.Parse(json);
//輸出:張三
Console.WriteLine(jobj["name"].ToString());
//解析hobbys
JArray jarr = JArray.Parse(jobj["hobbys"].ToString());
//迭代jarr即可
//同樣的,假如我們有一個(gè)JObject對(duì)象
JObject obj = new JObject();
obj["name"] = "張三";
obj["age"] = 20;
//輸出json數(shù)據(jù),直接ToString()就可以
Console.WriteLine(obj.ToString());
如果說你的Json結(jié)構(gòu)是一個(gè)數(shù)組形式的話,即[{},{},{}],我們可以通過以下方式去解析
//第一種:DataTable
DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
//或者使用JavaScriptSerializer
dt =jss.Deserialize<DataTable>(json);
//解析DataTable即可
//第二種:JArray
JArray jarr = JArray.Parse(json);
//然后去迭代jarr即可
foreach (var j in jarr)
{
Console.WriteLine(j["key"]);
}
//第三種,也就是我們上面提到了有實(shí)體類的情況下
List<Studet> list = JsonConvert.DeserializeObject<List<Studet>>(json);
以上基本可以解決我們的日常開發(fā)需求,個(gè)人推薦使用JSON.NET,下一篇會(huì)再介紹下JSON.NET的部分高級(jí)用法,用來滿足我們的一些特殊需求。
由簡(jiǎn)入繁,拿來即用
后續(xù)精彩,持續(xù)關(guān)注
聯(lián)系客服