Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 7.3 XML与JSON处理

7.3 XML与JSON处理

概述

在现代应用开发中,XML和JSON是两种最常用的数据交换格式。C#提供了丰富的内置功能来处理这两种格式,使开发者能够轻松地进行数据的序列化、反序列化和操作。

XML处理

System.Xml命名空间

C#通过System.Xml命名空间提供了一系列处理XML的类:

  • XmlDocument: 表示整个XML文档
  • XmlElement: 表示XML元素
  • XmlAttribute: 表示XML属性
  • XmlReader/XmlWriter: 提供快速、非缓存的XML读写

读取XML数据

XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
XmlNode root = doc.DocumentElement;

foreach(XmlNode node in root.ChildNodes)
{
    Console.WriteLine($"节点: {node.Name}, 值: {node.InnerText}");
}

写入XML数据

XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("Users");
doc.AppendChild(root);

XmlElement user = doc.CreateElement("User");
user.SetAttribute("id", "1");
user.InnerText = "张三";
root.AppendChild(user);

doc.Save("output.xml");

LINQ to XML

更现代的XML处理方式是使用System.Xml.Linq命名空间中的LINQ to XML:

XDocument xdoc = XDocument.Load("data.xml");
var users = from u in xdoc.Descendants("User")
            select new {
                Id = u.Attribute("id").Value,
                Name = u.Value
            };

JSON处理

System.Text.Json

.NET Core 3.0+引入了高性能的System.Text.Json命名空间:

序列化

var user = new { Name = "李四", Age = 30 };
string json = JsonSerializer.Serialize(user);
// 输出: {"Name":"李四","Age":30}

反序列化

string json = "{\"Name\":\"王五\",\"Age\":25}";
var person = JsonSerializer.Deserialize<Person>(json);

Newtonsoft.Json

流行的第三方库Newtonsoft.Json(Json.NET)提供更多功能:

复杂对象处理

var settings = new JsonSerializerSettings {
    NullValueHandling = NullValueHandling.Ignore,
    Formatting = Formatting.Indented
};

string json = JsonConvert.SerializeObject(obj, settings);

LINQ to JSON

JObject obj = JObject.Parse(json);
string name = (string)obj["Name"];
int age = (int)obj["Age"];

XML与JSON互转

XML转JSON

XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
string json = JsonConvert.SerializeXmlNode(doc);

JSON转XML

string json = "{\"User\":{\"Name\":\"赵六\"}}";
XmlDocument doc = JsonConvert.DeserializeXmlNode(json);

最佳实践

  1. 性能考虑:

    • 对于大型文件,使用流式处理(XmlReader/JsonSerializer)
    • 考虑使用Utf8JsonWriter/Utf8JsonReader进行高性能处理
  2. 安全性:

    • 验证输入数据
    • 防范XXE(XML外部实体)攻击
  3. 可维护性:

    • 为复杂结构创建专门的DTO类
    • 使用注释说明特殊处理逻辑

示例项目

创建一个控制台应用,实现:

  1. 从XML文件读取产品数据
  2. 转换为JSON格式
  3. 筛选特定条件的产品
  4. 将结果保存为新的JSON文件

总结

XML和JSON处理是C#开发中的常见任务。掌握这些技术将使你能够:

  • 轻松处理各种API响应
  • 实现配置文件读写
  • 构建数据转换管道
  • 集成不同系统间的数据交换

随着.NET的发展,JSON处理变得越来越高效和简单,而XML仍然在企业级应用中广泛使用。根据项目需求选择合适的工具和技术。

Last Updated:: 5/3/25, 11:01 PM