C# 中将字典转换为 JSON 字符串
- JSON 字符串的基本结构
-
在
C#中使用JsonConvert.SerializeObject()将字典转换为 JSON -
在
C#中使用自定义函数将字典转换为 JSON -
在 C# 中为
.NETWebapps 使用 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.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 版本中使用你的代码。有时控制台版本将无法工作并且完全兼容。
因此,请确保你使用的函数、程序集和指令与你正在运行的版本相匹配。
你可以根据自己的适用性修改上面给出的代码。感谢你的阅读!
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