前言
JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。簡單地說,JSON 可以将 JavaScript 對象中表示的一組資料轉換為字元串,然後就可以在函數之間輕松地傳遞這個字元串,或者在異步應用程式中将字元串從 Web 客戶機傳遞給伺服器端程式。這個字元串看起來有點兒古怪,但是 JavaScript 很容易解釋它,而且 JSON 可以表示比"名稱 / 值對"更複雜的結構。例如,可以表示數組和複雜的對象,而不僅僅是鍵和值的簡單清單。
它所具有的特性:
1、Flexible JSON serializer for converting between .NET objects and JSON ——靈活的JSON序列化器用于實作.NET對象與JSON的轉換
2、LINQ to JSON for manually reading and writing JSON ——LINQ to JSON用于手動讀寫Json
3、High performance, faster than .NET's built-in JSON serializers——高性能,比.NET内置的JSON序列化程式速度要更快
4、Writes indented, easy to read JSON ——縮排書寫,使得Json易讀
5、Convert JSON to and from XML——支援JSON 與 XML 兩種格式互相轉換
6、Supports .NET 2 .NET 3.5 .NET 4, Silverlight, Windows Phone and Windows 8——支援.NET2.NET3.5.NET4,Silverlight,Windows Phone和Windows 8
在.Net中内置了讀寫Json的對象就是 DataContractJsonSerializer 和 JavaScriptSerializer這兩個。但是這個是在.Net 3.5之後才支援的。并且性能上并不優秀。
性能對比圖如下:
這是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。
1、序列化一個對象為json字元串。
2、然後再将字元串反序列化為對象。
3、JSON與XML之間的互轉。
4、……當然還有其他格式的轉換,我們暫時不進行舉例,後面的文章會對此進行比較詳細的描述。
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 = "[email protected]",
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": "[email protected]",
"Active": true,
"CreatedDate": "2014-03-27T00:00:00Z",
"Roles": [
"aehyok",
"Kris"
]
}
Deserialize an Object——反序列化一個對象
繼續使用上面的實體類
現在是先定義一個Json的字元串,我們也可以将上面生成的Json字元串進行簡單的修改,然後進行反序列化處理
string json = @"{
'Email': '[email protected]',
'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': '[email protected]',
'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);
通過調試得到的結果為
其他功能簡介
1、Linq to JSON是用來操作JSON對象的。可以用于快速查詢、修改、删除和建立JSON對象。當JSON對象内容比較複雜,而我們僅僅需要其中的一小部分資料時,可以考慮使用Linq to JSON來讀取和修改部分的資料而非反序列化全部。
2、Json.Net不僅支援序列化和反序列化對象,還支援XML和JSON之間的轉換。它支援的資料類型與JSON之間的轉換,例如:DataSet、DataTable、Entity Framework和NHibernate、Collection、Dictionary、Dynamic等等,大部分的資料類型基本都支援。
3、JSON.NET支援BSON資料的序列化和反序列化。
BSON(Binary Serialized Document Format)是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON,它和JSON一樣,支援内嵌的文檔對象和數組對象,但是BSON有JSON沒有的一些資料類型,如Date和BinData類型。
4、JSON Schema 用于描述JSON資料的結構和類型。如同DTD與XML的關系。
暫時我了解了這麼多的功能。總之,它對于一些什麼為空處理、日期格式控制、忽略屬性轉換等等的一些配置處理,都做的非常不錯,有關詳細介紹會在後續學習之後,進行總結記錄介紹。
英語小貼士
1、get out of here。——滾蛋。
2、none of your business。 ——關你屁事。
3、I can't follow your step。——我跟不上你的節奏了。
4、what price of this book?==How much is this book?
作者:aehyok
出處:http://www.cnblogs.com/aehyok/
感謝您的閱讀,如果您對我的部落格所講述的内容有興趣,那不妨點個推薦吧,謝謝支援:-O。