豆豆酱学C#笔记之Newtonsoft.Json(三)
今天我们继续深入探讨Newtonsoft.Json的使用。之前我们已经介绍了Json与Xml、类的互相转换,实际上,Newtonsoft.Json的功能远不止这些。接下来,我们将详细介绍另外几种常见的转换操作。在下面的示例代码中,都需要引用Newtonsoft.Json这个库。
using Newtonsoft.Json; // Newtonsoft.Json引用
1. 将字典转换成Json字符串
以下是将字典转换为Json字符串的示例代码:
// Newtonsoft.Json测试
private static void JsonTest()
{
// 创建一个字典
Dictionary<string, int> dic = new Dictionary<string, int>
{
{ "James", 9001 },
{ "Jo", 3474 },
{ "Jess", 11926 }
};
// 将字典转换成Json字符串
string json = JsonConvert.SerializeObject(dic);
Console.WriteLine(json);
}
运行上述代码后,我们可以看到字典成功转换为了Json字符串。是不是很简单?如果您看过我之前的文章,可能会有似曾相识的感觉。没错,这里使用的是JsonConvert.SerializeObject()函数,后续我们还会继续用到它。
接下来,我们介绍该函数的另一个参数Formatting,它用于控制Json字符串的显示格式。我们在函数中添加Formatting.Indented参数,看看结果有什么不同:
// Newtonsoft.Json测试
private static void JsonTest()
{
// 创建一个字典
Dictionary<string, int> dic = new Dictionary<string, int>
{
{ "James", 9001 },
{ "Jo", 3474 },
{ "Jess", 11926 }
};
// 将字典转换成具有缩进格式的Json字符串
string json = JsonConvert.SerializeObject(dic, Formatting.Indented);
Console.WriteLine(json);
}
运行修改后的代码,您会发现输出的Json字符串具有缩进格式,比之前的结果更加直观。这种用法在需要将Json字符串记录到文档中时非常有效。
2. Json字符串转换成字典
下面我们将前面得到的Json字符串转换回字典,示例代码如下:
// Newtonsoft.Json测试
private static void JsonTest()
{
// 创建一个字典
Dictionary<string, int> dic = new Dictionary<string, int>
{
{ "James", 9001 },
{ "Jo", 3474 },
{ "Jess", 11926 }
};
// 将字典转换成具有缩进格式的Json字符串
string json = JsonConvert.SerializeObject(dic, Formatting.Indented);
Console.WriteLine(json + "\n");
// 创建一个新的字典保存结果
Dictionary<string, int> newDic = JsonConvert.DeserializeObject<Dictionary<string, int>>(json);
// 打印字典中元素数量
Console.WriteLine(newDic.Count);
}
我们将前面代码中得到的Json字符串作为参数传递给JsonConvert.DeserializeObject<Dictionary<string, int>>()函数,从而将Json字符串转换为字典。运行代码后,我们可以看到新字典中元素的数量与原字典相同。
3. 集合转换成Json字符串
一阶集合转换
首先,我们来看一阶集合转换为Json字符串的示例:
// Newtonsoft.Json测试
private static void JsonTest()
{
// 创建一个集合
List<string> list = new List<string>()
{
"James",
"Jo",
"Jess"
};
// 将集合转换成具有缩进格式的Json字符串
string json = JsonConvert.SerializeObject(list, Formatting.Indented);
Console.WriteLine(json);
}
运行上述代码,我们可以看到一阶集合成功转换为了具有缩进格式的Json字符串。
多阶集合转换
那么,如果是多阶集合呢?我们来测试一下:
// Newtonsoft.Json测试
private static void JsonTest()
{
// 创建一个多阶集合
List<List<string>> list = new List<List<string>>
{
new List<string>{"James","Jo","Jess"},
new List<string>{"1001","1002","1003"}
};
// 将集合转换成具有缩进格式的Json字符串
string json = JsonConvert.SerializeObject(list, Formatting.Indented);
Console.WriteLine(json);
}
运行代码后,我们发现多阶集合同样可以成功转换为Json字符串。
4. Json字符串转换成集合
我们使用前面多阶集合转换得到的Json字符串作为参数,将其转换回集合,并遍历集合中的元素,示例代码如下:
// Newtonsoft.Json测试
private static void JsonTest()
{
// 创建一个多阶集合
List<List<string>> list = new List<List<string>>
{
new List<string>{"James","Jo","Jess"},
new List<string>{"1001","1002","1003"}
};
// 将集合转换成具有缩进格式的Json字符串
string json = JsonConvert.SerializeObject(list, Formatting.Indented);
Console.WriteLine(json + "\n");
// 创建一个新集合储存结果
List<List<string>> newList = JsonConvert.DeserializeObject<List<List<string>>>(json);
foreach (List<string> child0 in newList)
{
foreach (string child1 in child0)
{
Console.WriteLine(child1);
}
}
}
运行代码后,我们可以看到集合中的元素被成功遍历输出。
通过以上示例,我们可以看到Newtonsoft.Json在字典、集合与Json字符串之间的转换操作非常方便。今天的笔记就到这里啦!