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