C# 中將字典轉換為 JSON 字串
- JSON 字串的基本結構
-
在
C#
中使用JsonConvert.SerializeObject()
將字典轉換為 JSON -
在
C#
中使用自定義函式將字典轉換為 JSON -
在 C# 中為
.NET
Webapps 使用 JavaScript 序列化程式
那麼,我們如何在 C#
中建立字典?在 C# 中,我們首先匯入一個包,如下所示。
using System.Collections.Generic;
然後,在類中宣告的 MAIN
函式中,我們宣告 Dictionary
物件。
IDictionary<int, double> cgpas = new IDictionary<int, dictionary>();
現在讓我們繼續,看看我們如何將 Dictionary
轉換為 JSON
。
JSON 字串的基本結構
什麼是 JSON?JSON 代表 JavaScript Object Notation
。
它使用一種將值對映到鍵的結構。因此,如果我們想在商店中儲存一組員工,比方說,我們可以按照以下方式進行。
{"employees" : {{"id" : 1 , "name" : "John"}, {"id" : 2, "name" : "Kevin"}}
現在上面給出的例子可能有點複雜。但是讓我們分解一下。
我們首先定義 JSON,因為你可以深入瞭解它的結構,並更好地分解後面所述的轉換是如何發生的。
所以我們從"Employees"
開始,這是 KEY
。然後,我們看到一個大括號,後面跟著 2
個大括號(關閉和開啟)。
花括號外殼也可以稱為一組。它包含鍵和值,因為我們只定義了 2
個不同的員工,JOHN
和 KEVIN
;因此只定義了兩個集合。
這些都包含在一個更大的集合中,即 KEY EMPLOYEES
的值。因此,如果我們現在傾向於呼叫 EMPLOYEES
標籤,我們將收到這個集合作為值。
在 C#
中使用 JsonConvert.SerializeObject()
將字典轉換為 JSON
讓我們首先向我們剛剛初始化的 CGPA
字典新增一些值。
cgpas.Add(1, 3.4);
cgpas.Add(2, 3.13);
cgpas.Add(3, 3.01);
如果我們想得到,比如說,ID 2
的值,我們可以呼叫 PRINT
語句如下。
Console.WriteLine("The CGPA of ID 2 is: " + cgpas[2]);
這裡的 ID
括在方括號內,表示 KEY
。現在讓我們使用 JsonConvert
呼叫進行轉換。
string js = JsonConvert.SerializeObject(cgpas);
在執行此程式碼之前,請確保你已下載 NewtonSoft.JSON
。如果你不這樣做,請訪問他們的網站,或者如果在 Visual Studio
中工作,請轉到 Nuget Packages
並安裝 NewtonSoft.JSON
以避免任何錯誤。
現在,讓我們在這裡輕鬆列印轉換後的字串。
Console.WriteLine("The CGPAs are: " + js);
輸出如下。
The CGPAs are: {"1":3.4,"2":3.13,"3":3.01}
如果找不到 SerializeObject
定義,請檢查你是否從 JsonConvert
類呼叫它,而不是從 System.Text.Json
呼叫 JsonConverter
。還要檢查 NewtonSoft.JSON
的安裝。
在 C#
中使用自定義函式將字典轉換為 JSON
讓我們看看另一個解決方案,其中我們實現了一個函式,該函式接受一個字典並將其轉換為 JSON 字串。它可以稍後修改以滿足你的需要,但讓我們繼續將它用於我們的 IDICTIONARY CGPAS
。
static string MyDictionaryToJson(IDictionary<int, double> dict)
{
var x = dict.Select(d =>
string.Format("\"{0}\": {1}", d.Key, string.Join(",", d.Value)));
return "{" + string.Join(",", x) + "}";
}
現在,這裡發生了什麼?好吧,我們將字典作為引數傳遞。
你會注意到我們使用了 IDICTIONARY
而不是 DICTIONARY
。IDICTIONARY
繼承自 DICTIONARY
並有一些更方便的擴充套件,所以我們繼續使用它。
但是,基本功能保持不變。在函式內部,我們通過對映 DICTIONARY
中的 KEY
並使用括號來表示值應該如何在字串中來格式化字串。
{1}
周圍的括號會將值簡單地對映為數字或字串。但是,如果你傾向於使其更具表現力和複雜性,你可以像這樣新增方括號:{[1]}
並使其工作。
這將列印方括號內的值。其餘的以正確的格式返回字串。
現在在 MAIN
函式中,進行相同的呼叫。
string js = MyDictionaryToJson(cgpas);
Console.WriteLine("The CGPAs are: " + js);
輸出:
The CGPAs are: {"1": 3.4,"2": 3.13,"3": 3.01}
在 C# 中為 .NET
Webapps 使用 JavaScript 序列化程式
假設你正在使用以 C# 作為核心的 Web 應用程式。在這種情況下,你最好遵循 LIST
結構來定義物件,然後使用 JavaScriptSerializer()
函式將其轉換為字串。
使用下面定義的名稱空間以避免編譯時出現任何語法錯誤。
using System.Web.UI;
using System.Web.Script.Serialization;
然後,讓我們繼續建立 CGPA
列表。
var cgpas = new List<int, double>();
cgpas.Add(new CGPA() { ID = 1, CGP = 3.4});
cgpas.Add(new CGPA() { ID = 2, CGP = 3.13 });
cgpas.Add(new CGPA() { ID = 3, CGP = 3.01 });
當然,我們還必須定義 CGPA
類來例項化。
public class CGPA
{
public int ID { get; set; }
public double CGP { get; set; }
}
然後,我們可以將其轉換為字串,如下所示。
var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(cgpas);
你可以列印 serializedResult
,它將是從初始化的 LIST
格式化的字串。
你可能不得不在 Web 版本中使用你的程式碼。有時控制檯版本將無法工作並且完全相容。
因此,請確保你使用的函式、程式集和指令與你正在執行的版本相匹配。
你可以根據自己的適用性修改上面給出的程式碼。感謝你的閱讀!
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub