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