Json.Net6.0用法介紹
前言
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。簡單地說,JSON 可以將 JavaScript 對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個字符串,或者在異步應(yīng)用程序中將字符串從 Web 客戶機(jī)傳遞給服務(wù)器端程序。這個字符串看起來有點兒古怪,但是 JavaScript 很容易解釋它,而且 JSON 可以表示比"名稱 / 值對"更復(fù)雜的結(jié)構(gòu)。例如,可以表示數(shù)組和復(fù)雜的對象,而不僅僅是鍵和值的簡單列表。
它所具有的特性:
- 1、Flexible JSON serializer for converting between .NET objects and JSON ——靈活的JSON序列化器用于實現(xiàn).NET對象與JSON的轉(zhuǎn)換
- 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內(nèi)置的JSON序列化程序速度要更快
- 4、Writes indented, easy to read JSON ——縮排書寫,使得Json易讀
- 5、Convert JSON to and from XML——支持JSON 與 XML 兩種格式相互轉(zhuǎn)換
- 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中內(nèi)置了讀寫Json的對象就是 DataContractJsonSerializer 和 JavaScriptSerializer這兩個。但是這個是在.Net 3.5之后才支持的。并且性能上并不優(yōu)秀。
性能對比圖如下:

這是Json.Net 5與.NET內(nèi)置對象的性能對比圖,而現(xiàn)在Json.Net的版本已經(jīng)到達(dá)了Version 6.0.1 ,相信它會有更好的表現(xiàn)。JSON.NET是開源的,下載地址:http://json.codeplex.com/,這里有完整的源代碼,當(dāng)然也可以參考http://james.newtonking.com/這里。
jb51下載地址:http://www.dhdzp.com/codes/571698.html
當(dāng)然通過VS進(jìn)入Nuget管理包也可以進(jìn)行下載Json.Net的程序包

下面我們來簡單的通過實例進(jìn)行初步了解JSON.NET。
- 1、序列化一個對象為json字符串。
- 2、然后再將字符串反序列化為對象。
- 3、JSON與XML之間的互轉(zhuǎn)。
- 4、……當(dāng)然還有其他格式的轉(zhuǎn)換,我們暫時不進(jìn)行舉例,后面的文章會對此進(jìn)行比較詳細(xì)的描述。
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; }
}
實例化實體類,然后進(jìn)行序列化為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字符串結(jié)果為
{
"Email": "aehyok@vip.qq.com",
"Active": true,
"CreatedDate": "2014-03-27T00:00:00Z",
"Roles": [
"aehyok",
"Kris"
]
}
Deserialize an Object——反序列化一個對象
繼續(xù)使用上面的實體類
現(xiàn)在是先定義一個Json的字符串,我們也可以將上面生成的Json字符串進(jìn)行簡單的修改,然后進(jìn)行反序列化處理
string json = @"{
'Email': 'aehyok@vip.qq.com',
'Active': true,
'CreatedDate': '2014-03-27T00:00:00Z',
'Roles': [
'aehyok',
'Kris'
]
}";
Account account = JsonConvert.DeserializeObject<Account>(json);
通過調(diào)試得到的數(shù)據(jù)為

Convert JSON to XML——將JSON轉(zhuǎn)換為XML
首先還是定義一個Json字符串,然后對其進(jìn)行轉(zhuǎn)換
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");
轉(zhuǎn)換結(jié)果為

Convert XML to JSON——將XML轉(zhuǎn)換為JSON
現(xiàn)在就是需要先定義一個簡單的XML字符串,然后對其進(jìn)行轉(zhuǎn)換處理
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);
通過調(diào)試得到的結(jié)果為

其他功能簡介
- 1、Linq to JSON是用來操作JSON對象的。可以用于快速查詢、修改、刪除和創(chuàng)建JSON對象。當(dāng)JSON對象內(nèi)容比較復(fù)雜,而我們僅僅需要其中的一小部分?jǐn)?shù)據(jù)時,可以考慮使用Linq to JSON來讀取和修改部分的數(shù)據(jù)而非反序列化全部。
- 2、Json.Net不僅支持序列化和反序列化對象,還支持XML和JSON之間的轉(zhuǎn)換。它支持的數(shù)據(jù)類型與JSON之間的轉(zhuǎn)換,例如:DataSet、DataTable、Entity Framework和NHibernate、Collection、Dictionary、Dynamic等等,大部分的數(shù)據(jù)類型基本都支持。
- 3、JSON.NET支持BSON數(shù)據(jù)的序列化和反序列化。
BSON(Binary Serialized Document Format)是一種類json的一種二進(jìn)制形式的存儲格式,簡稱Binary JSON,它和JSON一樣,支持內(nèi)嵌的文檔對象和數(shù)組對象,但是BSON有JSON沒有的一些數(shù)據(jù)類型,如Date和BinData類型。 - 4、JSON Schema 用于描述JSON數(shù)據(jù)的結(jié)構(gòu)和類型。如同DTD與XML的關(guān)系。
- 暫時我了解了這么多的功能。總之,它對于一些什么為空處理、日期格式控制、忽略屬性轉(zhuǎn)換等等的一些配置處理,都做的非常不錯,有關(guān)詳細(xì)介紹會在后續(xù)學(xué)習(xí)之后,進(jìn)行總結(jié)記錄介紹。
到此這篇關(guān)于Json.Net6.0用法介紹的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- .Net?6簡介并和之前版本寫法做對比
- c# 使用Json.NET實現(xiàn)json序列化
- C#使用Json.Net進(jìn)行序列化和反序列化及定制化
- .NET中JSON的序列化和反序列化的幾種方式
- .NET Core簡單讀取json配置文件
- .NetCore獲取Json和Xml格式的配置信息
- Json.net 常用使用小結(jié)(推薦)
- C#中使用JSON.NET實現(xiàn)JSON、XML相互轉(zhuǎn)換
- .Net基于MVC4 Web Api輸出Json格式實例
- 在.NET中使用Newtonsoft.Json轉(zhuǎn)換,讀取,寫入的方法介紹
- 使用ASP.NET一般處理程序或WebService返回JSON的實現(xiàn)代碼
相關(guān)文章
.Net結(jié)構(gòu)型設(shè)計模式之裝飾模式(Decorator)
這篇文章介紹了.Net結(jié)構(gòu)型設(shè)計模式之裝飾模式(Decorator),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
Linux?CentOS下docker部署Asp.Net?Core(.Net6)
這篇文章介紹了Linux?CentOS下docker部署Asp.Net?Core(.Net6)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
ASP.NET Core應(yīng)用啟動Startup類簡介
這篇文章介紹了ASP.NET Core中的應(yīng)用啟動Startup類,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
ASP.Net?Core?MVC基礎(chǔ)系列之項目創(chuàng)建
這篇文章介紹了創(chuàng)建ASP.Net?Core?MVC項目的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
.Net中的不可變集合(Immutable Collection)程序集簡介
這篇文章介紹了.Net中的不可變集合(Immutable Collection)程序集,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解
ABP框架是基于ASP.NET的Web開發(fā)框架,不過它遵循一種名為DDD(領(lǐng)域驅(qū)動設(shè)計)的設(shè)計模式原則,接下來我們就來看一下ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解2016-06-06

