C#中把DataTable、Dataset轉(zhuǎn)Json數(shù)據(jù)
什么是JSON
JSON是JavaScript Object Notation的簡(jiǎn)稱(chēng),中文含義為“JavaScript 對(duì)象表示法”,它是一種數(shù)據(jù)交換的文本格式,而不是一種編程語(yǔ)言。
JSON 是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于 ECMAScript (w3c制定的js規(guī)范)的一個(gè)子集,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。
JSON的特點(diǎn)
JSON 主要具有以下特性,這些特性使它成為理想的數(shù)據(jù)交換語(yǔ)言:
- JSON 是輕量級(jí)的文本數(shù)據(jù)交換格式
- JSON 具有自我描述性,更易理解
- JSON 采用完全獨(dú)立于語(yǔ)言的文本格式:JSON 使用 JavaScript 語(yǔ)法來(lái)描述數(shù)據(jù)對(duì)象,但是 JSON 仍然獨(dú)立于語(yǔ)言和平臺(tái)。JSON 解析器和 JSON 庫(kù)支持許多不同的編程語(yǔ)言。 目前常見(jiàn)的動(dòng)態(tài)編程語(yǔ)言(PHP,JSP,.NET)都支持JSON。
- JSON 是存儲(chǔ)和交換文本信息的一種語(yǔ)法,它與XML具有相同的特性,是一種數(shù)據(jù)存儲(chǔ)格式,卻比 XML 更小、更快、 更易于人編寫(xiě)和閱讀、更易于生成和解析。
類(lèi)似于 XML 的特性:
- JSON 是純文本
- JSON 具有“自我描述性”(人類(lèi)可讀)
- JSON 具有層級(jí)結(jié)構(gòu)(值中存在值)
- JSON 可通過(guò) JavaScript 進(jìn)行解析
- JSON 數(shù)據(jù)可使用 AJAX 進(jìn)行傳輸
相比 XML 的不同之處:
- 沒(méi)有結(jié)束標(biāo)簽
- 更短
- 讀寫(xiě)的速度更快
- 能夠使用內(nèi)建的 JavaScript eval() 方法進(jìn)行解析
- 使用數(shù)組
- 不使用保留字
DataTable轉(zhuǎn)Json
public static string DataTableToJson1(string jsonName, DataTable dt) { StringBuilder Json = new StringBuilder(); Json.Append("{\"" + jsonName + "\":["); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { Json.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\""); if (j < dt.Columns.Count - 1) { Json.Append(","); } } Json.Append("}"); if (i < dt.Rows.Count - 1) { Json.Append(","); } } } Json.Append("]}"); return Json.ToString(); }
Dataset轉(zhuǎn)Json
主方法
public static string Dataset2Json(DataSet ds) { StringBuilder json = new StringBuilder(); foreach (DataTable dt in ds.Tables) { json.Append("{\""); json.Append(dt.TableName); json.Append("\":"); json.Append(DataTable2Json(dt)); json.Append("}"); } return json.ToString(); }
調(diào)用方法
public static string DataTableToJson2(DataTable dt) { StringBuilder Json = new StringBuilder(); Json.Append("{\"" + dt.TableName + "\":["); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { Json.Append("\r\n" + "{\"device\":" + "\r\n" + "{"); for (int j = 0; j < dt.Columns.Count; j++) { string columName = dt.Columns[j].ColumnName.ToString(); string columValue = dt.Rows[i][j].ToString(); if (j == 9)//"radios":{"wifiMAC":~~}, Json.Append("\"radios\":{\"" + columName + "\":\"" + columValue + "\"}"); else if (j == 10 || j == 11)//"partDetails":{"mainLogicBoardSerialNumber":~~, "batterySerialNumber":~~ } { if (j == 10) Json.Append("\"partDetails\":{\"" + columName + "\":\"" + columValue + "\""); else Json.Append("\"" + columName + "\":\"" + columValue + "\"}}"); } else if (j == 12) Json.Append("\"order\":{\"" + columName + "\":\"" + columValue + "\""); else if (j == 16) Json.Append("\"" + columName + "\":\"" + columValue + "\"}"); else Json.Append("\"" + columName + "\":\"" + columValue + "\""); if (j < dt.Columns.Count - 1 ) Json.Append(","); } Json.Append("}"); if (i < dt.Rows.Count - 1) { Json.Append(","); } } } Json.Append("\r\n" + "]}"); return Json.ToString(); }
到此這篇關(guān)于C#中把DataTable、Dataset轉(zhuǎn)Json數(shù)據(jù)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)簡(jiǎn)單的汽車(chē)租賃系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)汽車(chē)租賃系統(tǒng)的具體實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05WinForm使用正則表達(dá)式提取內(nèi)容的方法示例
這篇文章主要介紹了WinForm使用正則表達(dá)式提取內(nèi)容的方法,結(jié)合實(shí)例形式分析了WinForm基于正則匹配獲取指定內(nèi)容的相關(guān)操作技巧,需要的朋友可以參考下2017-05-05C#實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)圖書(shū)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02WPF中使用CallerMemberName簡(jiǎn)化InotifyPropertyChanged的實(shí)現(xiàn)
這篇文章介紹了WPF中使用CallerMemberName簡(jiǎn)化InotifyPropertyChanged的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C#使用自定義算法對(duì)數(shù)組進(jìn)行反轉(zhuǎn)操作的方法
這篇文章主要介紹了C#使用自定義算法對(duì)數(shù)組進(jìn)行反轉(zhuǎn)操作的方法,涉及C#針對(duì)數(shù)組操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04c#基礎(chǔ)知識(shí)---委托,匿名函數(shù),lambda
這篇文章主要介紹了c# 委托,匿名函數(shù),lambda的相關(guān)知識(shí),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06