数据结构差异
- XmlDocument:XML 数据以树形结构表示,由元素、属性、文本节点等组成。元素可以嵌套形成层次结构,属性提供关于元素的额外信息。
- JsonDocument:JSON 数据以键值对的集合(对象)或有序值列表(数组)的形式表示。对象中的键是字符串,值可以是各种数据类型,包括其他对象和数组。
语法差异
- XmlDocument:XML 使用标签来定义元素,标签成对出现(开始标签和结束标签),属性在开始标签内定义。例如:
<person name="John"><age>30</age></person>
- JsonDocument:JSON 使用花括号
{}
表示对象,方括号 []
表示数组,键值对之间用冒号 :
分隔,不同的键值对或数组元素之间用逗号 ,
分隔。例如:{"name":"John","age":30}
解析方式差异
- XmlDocument:通过加载 XML 字符串或文件,然后使用节点导航方法(如 SelectSingleNode、SelectNodes 等)来访问和操作 XML 数据。
- JsonDocument:加载 JSON 字符串后,通过 JsonElement 类型来访问 JSON 对象和数组中的数据,使用 GetProperty 方法获取对象属性值,使用索引访问数组元素。
示例
XmlDocument 示例
using System;
using System.Xml;
class Program
{
static void Main()
{
string xmlString = "<person><name>John</name><age>30</age></person>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);
XmlNode nameNode = xmlDoc.SelectSingleNode("//name");
XmlNode ageNode = xmlDoc.SelectSingleNode("//age");
if (nameNode != null && ageNode != null)
{
string name = nameNode.InnerText;
int age = int.Parse(ageNode.InnerText);
Console.WriteLine($"Name: {name}, Age: {age}");
}
}
}
JsonDocument 示例
using System;
using System.Text.Json;
class Program
{
static void Main()
{
string jsonString = "{\"name\":\"John\",\"age\":30}";
JsonDocument jsonDoc = JsonDocument.Parse(jsonString);
JsonElement root = jsonDoc.RootElement;
string name = root.GetProperty("name").GetString();
int age = root.GetProperty("age").GetInt32();
Console.WriteLine($"Name: {name}, Age: {age}");
jsonDoc.Dispose();
}
}