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)
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);//
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;
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();