<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
/// <summary> /// 寫入json檔案 /// </summary> /// <param name="obj"></param> /// <param name="savePath"></param> public static void ConvertToJson(object obj, string savePath) { string str = JsonConvert.SerializeObject(obj); //json格式化 JsonSerializer jsonSerializer = new JsonSerializer(); TextReader textReader = new StringReader(str); JsonTextReader jsonTextReader = new JsonTextReader(textReader); object _object = jsonSerializer.Deserialize(jsonTextReader); if (_object != null) { StringWriter stringWriter = new StringWriter(); JsonTextWriter jsonWriter = new JsonTextWriter(stringWriter) { Formatting = Formatting.Indented, Indentation = 4, IndentChar = ' ' }; jsonSerializer.Serialize(jsonWriter, _object); File.WriteAllText(savePath, stringWriter.ToString()); } }
自定義的類不斷迭代,然後通過json樹模型寫入json檔案,這樣得到的資料不僅輕量而且易讀,是資料傳輸的優秀方式。
json和xml比較 筆者更喜歡xml
通過兩種在c#中常用的方式來實現對Json資料的序列化和反序列化,為了實現大多數的需求,我們採用稍微複雜一點的資料模型。
首先我們有以下json資料
{ "name": "張三", "age": 20, "idCard": "123456789", "birthday": "2021-01-01 00:00:00", "hobbys": [ { "sort": 1, "desc": "寫字" }, { "sort": 2, "desc": "游泳" } ] }
然後我們根據json的結構建立一個實體類
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; } }
//需新增參照:System.Web.Extensions //需匯入名稱空間:using System.Web.Script.Serialization; //json.txt中的資料為上面的json資料 string json = File.ReadAllText("d:\json.txt"); JavaScriptSerializer jss = new JavaScriptSerializer(); //反序列化成Studet物件 Studet student = jss.Deserialize<Studet>(json); //然後就可以直接用操作物件的方法直接點出來就行 //輸出:張三 Console.WriteLine(student.name); //同樣的,我們可以將上面的物件序列化成一個json資料 //序列化成json string resultJson = jss.Serialize(student); Console.WriteLine(resultJson);
//需新增參照:Newtonsoft.Json //需匯入名稱空間:using Newtonsoft.Json; using Newtonsoft.Json.Linq; //反序列化成物件 Studet student = JsonConvert.DeserializeObject<Studet>(json); //輸出:張三 Console.WriteLine(student.name); //序列化成json string resultJson = JsonConvert.SerializeObject(student); Console.WriteLine(resultJson);
以上是我們通過json結構對映實體類的方式去實現的解析json資料,很多時候我們可能並不需要,或者並不想建立太多的類,這時候我們可以通過以下方式去實現解析
//使用JObject(JSON.NET) //反序列化成JObject JObject jobj = JObject.Parse(json); //輸出:張三 Console.WriteLine(jobj["name"].ToString()); //解析hobbys JArray jarr = JArray.Parse(jobj["hobbys"].ToString()); //迭代jarr即可 //同樣的,假如我們有一個JObject物件 JObject obj = new JObject(); obj["name"] = "張三"; obj["age"] = 20; //輸出json資料,直接ToString()就可以 Console.WriteLine(obj.ToString());
如果說你的Json結構是一個陣列形式的話,即[{},{},{}],我們可以通過以下方式去解析
//第一種: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"]); } //第三種,也就是我們上面提到了有實體類的情況下 List<Studet> list = JsonConvert.DeserializeObject<List<Studet>>(json);
以上基本可以解決我們的日常開發需求,個人推薦使用JSON.NET。
這些僅為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45