MST
星途 面试题库

面试题:C#中XML和JSON数据解析的基础差异

请阐述在C#中,使用`XmlDocument`和`JsonDocument`类分别解析XML和JSON数据时,在数据结构、语法和解析方式上的主要差异。并各举一个简单示例说明如何从一个包含简单数据的字符串解析出相应的数据对象。
16.9万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

数据结构差异

  • 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();
    }
}