前言node
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。簡單地說,JSON 能夠將 JavaScript 對象中表示的一組數據轉換爲字符串,而後就能夠在函數之間輕鬆地傳遞這個字符串,或者在異步應用程序中將字符串從 Web 客戶機傳遞給服務器端程序。這個字符串看起來有點兒古怪,可是 JavaScript 很容易解釋它,並且 JSON 能夠表示比"名稱 / 值對"更復雜的結構。例如,能夠表示數組和複雜的對象,而不單單是鍵和值的簡單列表。json
它所具備的特性:數組
一、Flexible JSON serializer for converting between .NET objects and JSON ——靈活的JSON序列化器用於實現.NET對象與JSON的轉換服務器
二、LINQ to JSON for manually reading and writing JSON ——LINQ to JSON用於手動讀寫Json異步
三、High performance, faster than .NET's built-in JSON serializers——高性能,比.NET內置的JSON序列化程序速度要更快函數
四、Writes indented, easy to read JSON ——縮排書寫,使得Json易讀性能
五、Convert JSON to and from XML——支持JSON 與 XML 兩種格式相互轉換學習
六、Supports .NET 2 .NET 3.5 .NET 4, Silverlight, Windows Phone and Windows 8——支持.NET2.NET3.5.NET4,Silverlight,Windows Phone和Windows 8ui
在.Net中內置了讀寫Json的對象就是 DataContractJsonSerializer 和 JavaScriptSerializer這兩個。可是這個是在.Net 3.5以後才支持的。而且性能上並不優秀。this
性能對比圖以下:
這是Json.Net 5與.NET內置對象的性能對比圖,而如今Json.Net的版本已經到達了Version 6.0.1 ,相信它會有更好的表現。JSON.NET是開源的,下載地址:http://json.codeplex.com/,這裏有完整的源代碼,固然也能夠參考http://james.newtonking.com/ 這裏。
固然經過VS進入Nuget管理包也能夠進行下載Json.Net的程序包
下面咱們來簡單的經過實例進行初步瞭解JSON.NET。
一、序列化一個對象爲json字符串。
二、而後再將字符串反序列化爲對象。
三、JSON與XML之間的互轉。
四、……固然還有其餘格式的轉換,咱們暫時不進行舉例,後面的文章會對此進行比較詳細的描述。
Serialize an Object——序列化一個對象
首先定義一個實體類對象
public class Account { public string Email { get; set; } public bool Active { get; set; } public DateTime CreatedDate { get; set; } public IList<string> Roles { get; set; } }
實例化實體類,而後進行序列化爲Json字符串
Account account = new Account() { Email = "aehyok@vip.qq.com", Active = true, CreatedDate = new DateTime(2014, 3, 27, 0, 0, 0, DateTimeKind.Utc), Roles = new List<string>{"aehyok","Kris" } }; string json = JsonConvert.SerializeObject(account, Formatting.Indented);
獲得的json字符串結果爲
{ "Email": "aehyok@vip.qq.com", "Active": true, "CreatedDate": "2014-03-27T00:00:00Z", "Roles": [ "aehyok", "Kris" ] }
Deserialize an Object——反序列化一個對象
繼續使用上面的實體類
如今是先定義一個Json的字符串,咱們也能夠將上面生成的Json字符串進行簡單的修改,而後進行反序列化處理
string json = @"{ 'Email': 'aehyok@vip.qq.com', 'Active': true, 'CreatedDate': '2014-03-27T00:00:00Z', 'Roles': [ 'aehyok', 'Kris' ] }"; Account account = JsonConvert.DeserializeObject<Account>(json);
經過調試獲得的數據爲
Convert JSON to XML——將JSON轉換爲XML
首先仍是定義一個Json字符串,而後對其進行轉換
string json = @"{ '@Id': 1, 'Email': 'aehyok@viq.qq.com', 'Active': true, 'CreatedDate': '2014-01-20T00:00:00Z', 'Roles': [ 'Kris', 'aehyok' ], 'Team': { '@Id': 2, 'Name': 'Software Developers', 'Description': 'Creators of fine software products and services.' } }"; XNode node = JsonConvert.DeserializeXNode(json, "Root");
轉換結果爲
Convert XML to JSON——將XML轉換爲JSON
如今就是須要先定義一個簡單的XML字符串,而後對其進行轉換處理
string xml = @"<?xml version='1.0' standalone='no'?> <root> <person id='1'> <name>aehyok</name> <url>http://www.google.com</url> </person> <person id='2'> <name>Kris</name> <url>http://www.baidu.com</url> </person> </root>"; XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); string json = JsonConvert.SerializeXmlNode(doc);
經過調試獲得的結果爲
其餘功能簡介
一、Linq to JSON是用來操做JSON對象的。能夠用於快速查詢、修改、刪除和建立JSON對象。當JSON對象內容比較複雜,而咱們僅僅須要其中的一小部分數據時,能夠考慮使用Linq to JSON來讀取和修改部分的數據而非反序列化所有。
二、Json.Net不只支持序列化和反序列化對象,還支持XML和JSON之間的轉換。它支持的數據類型與JSON之間的轉換,例如:DataSet、DataTable、Entity Framework和NHibernate、Collection、Dictionary、Dynamic等等,大部分的數據類型基本都支持。
三、JSON.NET支持BSON數據的序列化和反序列化。
BSON(Binary Serialized Document Format)是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON,它和JSON同樣,支持內嵌的文檔對象和數組對象,可是BSON有JSON沒有的一些數據類型,如Date和BinData類型。
四、JSON Schema 用於描述JSON數據的結構和類型。如同DTD與XML的關係。
暫時我瞭解了這麼多的功能。總之,它對於一些什麼爲空處理、日期格式控制、忽略屬性轉換等等的一些配置處理,都作的很是不錯,有關詳細介紹會在後續學習以後,進行總結記錄介紹。