C# 中將字典轉換為 JSON 字串

Bilal Shahid 2023年10月12日
  1. JSON 字串的基本結構
  2. C# 中使用 JsonConvert.SerializeObject() 將字典轉換為 JSON
  3. C# 中使用自定義函式將字典轉換為 JSON
  4. 在 C# 中為 .NET Webapps 使用 JavaScript 序列化程式
C# 中將字典轉換為 JSON 字串

那麼,我們如何在 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 個不同的員工,JOHNKEVIN;因此只定義了兩個集合。

這些都包含在一個更大的集合中,即 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 而不是 DICTIONARYIDICTIONARY 繼承自 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.Collections.Generic;
using System.Text.Json;

然後,讓我們繼續建立 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 版本中使用你的程式碼。有時控制檯版本將無法工作並且完全相容。

因此,請確保你使用的函式、程式集和指令與你正在執行的版本相匹配。

你可以根據自己的適用性修改上面給出的程式碼。感謝你的閱讀!

作者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

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

相關文章 - Csharp Dictionary