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);
最佳实践
性能考虑:
- 对于大型文件,使用流式处理(XmlReader/JsonSerializer)
- 考虑使用Utf8JsonWriter/Utf8JsonReader进行高性能处理
安全性:
- 验证输入数据
- 防范XXE(XML外部实体)攻击
可维护性:
- 为复杂结构创建专门的DTO类
- 使用注释说明特殊处理逻辑
示例项目
创建一个控制台应用,实现:
- 从XML文件读取产品数据
- 转换为JSON格式
- 筛选特定条件的产品
- 将结果保存为新的JSON文件
总结
XML和JSON处理是C#开发中的常见任务。掌握这些技术将使你能够:
- 轻松处理各种API响应
- 实现配置文件读写
- 构建数据转换管道
- 集成不同系统间的数据交换
随着.NET的发展,JSON处理变得越来越高效和简单,而XML仍然在企业级应用中广泛使用。根据项目需求选择合适的工具和技术。
