豆豆酱学C#笔记之Newtonsoft.Json(一)
许久未和大家交流,一方面是我在适应新工作,另一方面是技术领域大神众多,他们在各方面为新手们解决了很多问题(我也是受益者,嘿嘿),我着实不敢班门弄斧。今天,我将为大家简单介绍 Newtonsoft.Json 这个库的使用。
在游戏开发和应用开发中,我们经常会用到 XML 文件和 JSON 格式。下面对这两者稍作了解:
- 文件类型与格式:XML 是一种文件类型,有其自身的规范和格式,在文件中书写的格式被称为 XML 格式;而 JSON 纯粹是一种“写法”,本质上是一种数据格式,有时 JSON 以字符串形式呈现。
- 格式形式:两者在格式上都类似于键值对。XML 格式有
<key>value</key>、<key value="..."/>等;JSON 格式相对简单,例如{"key": "value"}。 - 传输速度:XML 和 JSON 都可用于数据传输,但 JSON 的传输速度相对更快。
- 可读性:就个人而言,我不太愿意阅读 JSON 数据。
- 解析效率:JSON 的解析效率更高。
我们无需对它们进行过于深入的比较,在实际应用中自然能体会到哪个更适用。接下来,让我们聚焦今天的主角:Newtonsoft.Json。
1. 将 XML 格式转化为 JSON 格式
以下是实现此功能的代码:
using System.Xml;
using Newtonsoft.Json; // 引入关键库
/// <summary>
/// Xml 文件转 Json 返回
/// </summary>
/// <param name="path">Xml 文件路径</param>
public override string Xml2Json(string path)
{
XmlDocument doc = new XmlDocument();
doc.Load(path); // 通过 xml 的路径来读取 xml 文件
string json = JsonConvert.SerializeXmlNode(doc.DocumentElement, Newtonsoft.Json.Formatting.None, true);
return json;
}
代码中的 JsonConvert.SerializeXmlNode(XmlNode node, Formatting formatting, bool omitRootObject) 函数用于将 XML 格式转化为 JSON 格式。其中,第一个参数 node 是 XML 文件的根节点,第二个参数 formatting 是输出的格式,第三个参数 omitRootObject 用于选择是否显示根节点。详细参考:JsonConvert.SerializeXmlNode 文档。
2. 将 JSON 格式转化为 XML 格式
以下是实现此功能的代码:
using System.Xml;
using Newtonsoft.Json; // 引入相同的库
/// <summary>
/// Json 转 Xml 文件
/// </summary>
/// <param name="json">Json 字符串</param>
/// <param name="savePath">保存路径</param>
public void Json2Xml(string json, string savePath)
{
try
{
XmlDocument doc = JsonConvert.DeserializeXmlNode(json, "root");
CreateXmlFile(doc, savePath); // 为了更直观,将转化后的 XML 格式保存到 xml 文件中,无需遍历节点打印
Console.WriteLine("Xml 文件保存位置:" + savePath);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
代码中的 JsonConvert.DeserializeXmlNode(string value, string deserializeRootElementName) 函数用于将 JSON 格式转化为 XML 格式。其中,第一个参数 value 是 JSON 格式的字符串,第二个参数 deserializeRootElementName 用于添加一个根节点。详细参考:JsonConvert.DeserializeXmlNode 文档。
今天,我简单介绍了 Newtonsoft.Json 库的两个基本用法。实际上,Newtonsoft.Json 功能十分强大,是项目开发中提高效率的利器。
作者:InS 豆豆酱
泰斗原文:泰斗原文链接