C# JSON格式資料高階用法
JSON簡介
JSON(全稱為JavaScript ObjectNotation) 是一種輕量級的資料交換格式。它是基於JavaScript語法標準的一個子集。JSON採用完全獨立於語言的文字格式,可以很容易在各種網路、平臺和程式之間傳輸。JSON的語法很簡單,易於人閱讀和編寫,同時也易於機器解析和生成。
JSON與XML的比較
◆可讀性
JSON和XML的可讀性相比較而言,由於XML提供輔助的標籤,更加適合人閱讀和理解。
◆檔案大小與傳輸
XML允許使用方便的標籤,所以檔案尺寸是要比JSON大的。而且JSON源於Javascript,所以天生的主戰場是Javascript與網路,在這裡,JSON有著XML無法趕超的優勢。
JSON語法
1. JSON 語法是 JavaScript 物件表示法語法的子集。
資料在名稱/值對中:名稱是字串,使用雙引號表示。值可以是:數字(整數或浮點數),字串(在雙引號中),陣列(在方括號中),物件(在花括號中),true/false/null。
資料由逗號分隔:
花括號儲存物件:物件可以包含各種資料,包括陣列。
方括號儲存陣列:數字可以包含物件。
在做開發的時候,很多資料都是以Json格式傳輸的,而使用Json的時候,我們通常會涉及到幾個序列化物件的使用:
System.Runtime.Serialization.Json.DataContractJsonSerializer
System.Web.Script.Serialization.JavaScriptSerializer
Json.NET即Newtonsoft.Json
由於Json.NET的效能及通用性較好,因此它的使用範圍越來越廣,藉助前人的經驗今天我也總結使用一下。
官網API:http://www.newtonsoft.com/json/help/html/N_Newtonsoft_Json.htm
開源的類庫Newtonsoft.Json(下載地址https://www.newtonsoft.com/json)
基本用法
Json.Net是支援序列化和反序列化DataTable、DataSet、Entity Framework和Entity的
private void Newtonsoft() { DataTable dt = new DataTable(); dt.Columns.Add("Name", Type.GetType("System.String")); dt.Columns.Add("Sex", Type.GetType("System.String")); dt.Columns.Add("Age", Type.GetType("System.Int32")); dt.Columns.Add("PhoneNumber", Type.GetType("System.String")); for (int i = 0; i < 3; i++) { DataRow dr = dt.NewRow(); dr["Name"] = "Name" + i; dr["Sex"] = i % 2 == 0 ? "女" : "男"; dr["Age"] = 18 + i; dr["PhoneNumber"] = "18233388888"; dt.Rows.Add(dr); } /*序列化DataTable*/ string json = JsonConvert.SerializeObject(dt); /*反序列化DataTable*/ DataTable dtSource = JsonConvert.DeserializeObject<DataTable>(json); foreach (DataRow item in dtSource.Rows) { string name = item["Name"].ToString(); string sex = item["Sex"].ToString(); int age = int.Parse(item["Age"].ToString()); string phoneNumber = item["PhoneNumber"].ToString(); } }
Serialize JSON 格式轉換
Product product = new Product(); product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Sizes = new string[] { "Small" }; string json = JsonConvert.SerializeObject(product); // { // "Name": "Apple", // "Expiry": "2008-12-28T00:00:00", // "Sizes": [ // "Small" // ] // }
Deserialize JSON 格式轉換
string json = @"{ 'Name': 'Bad Boys', 'ReleaseDate': '1995-4-7T00:00:00', 'Genres': [ 'Action', 'Comedy' ] }"; Movie m = JsonConvert.DeserializeObject<Movie>(json); string name = m.Name; // Bad Boys
LINQ to JSON 格式轉換
JArray array = new JArray(); array.Add("Manual text"); array.Add(new DateTime(2000, 5, 23)); JObject o = new JObject(); o["MyArray"] = array; string json = o.ToString(); // { // "MyArray": [ // "Manual text", // "2000-05-23T00:00:00" // ] // }