如何在 .NET 中使用 XML 和 JSON?
使用JSON
JSON是一种数据格式,已成为XML的流行替代品。它简单而整洁,语法类似于JavaScript对象。实际上,术语JSON代表JavaScriptObjectNotation。.NET的最新版本为处理JSON数据提供了内置支持。
System.Text.Json命名空间提供高性能、低分配的功能来处理JSON数据。这些功能包括将对象序列化为JSON并将JSON反序列化为对象。它还提供用于创建内存中文档对象模型(DOM)的类型,用于访问JSON文档中的任何元素,提供数据的结构化视图。
序列化JSON
假设您有一个Point类,它有两个属性,X和Y,如下所示。
class Point{ public int X { get; set; } public int Y { get; set; } }
要序列化Point类的实例,您将使用Serialize()在JsonSerializer类上定义的方法,该类位于System.Text.Json命名空间中。
var point = new Point { X = 10, Y = 20 }; string jsonString = JsonSerializer.Serialize(point); Console.WriteLine(jsonString); // {"X":10,"Y":20}
要以正确的格式和缩进打印json数据,您可以将JsonSerializerOptions传递给Serializer方法,将WriteIndented属性指定为true。
string formattedString = JsonSerializer.Serialize(point, new JsonSerializerOptions { WriteIndented = true }); Console.WriteLine(formattedString);
从JSON反序列化
要将JSON数据反序列化为C#对象,您可以使用JSONSerializer类上的通用Deserialize
string jsonData = "{\"X\":10,\"Y\":20}"; Point q = JsonSerializer.Deserialize(jsonData); Console.WriteLine(q.X + " " + q.Y); //prints1020
使用XML
XML是一种非常流行的数据格式,用于存储和传输数据。.NET提供了许多API来处理C#编程语言中的XML。LinqtoXML是通用XML处理的主要机制。它提供了一个轻量级的、对linq友好的XML文档对象模型以及一组查询运算符。System.XML.Linq命名空间包含与LinqtoXML相关的类型。
考虑以下XML数据。它有一个根元素,employee,有两个属性id和status,值分别为'231'和'active'。该元素具有三个子元素:firstname、lastname和salary。
David Block 45000
LinqtoXMLAPI解析XML数据并将每个元素、属性、值和内容表示为具有存储相关数据的属性的对象。它形成了一个完全代表文档的对象树,这棵树被称为DOM,它代表文档对象模型。
XElement和XDocument提供静态Load和Parse方法来从XML数据源构建文档对象模型。Load从文件、流、URL、TextReader和XmlReader构建DOM;而Parse从字符串构建DOM。
string path = Path.Combine("Data", "data.xml"); string xmlData = File.ReadAllText(path); XElement employee = XElement.Parse(xmlData);
该Elements()方法提供元素的所有子元素。例如-
foreach (var elem in employee.Elements()){ Console.WriteLine(elem.Name); }
ToString()元素上的方法返回带有换行符和正确格式的XML字符串。例如-
Console.Write(employee.ToString()); /* Prints% */ David Block 45000
示例
注意:JSON库仅包含在.NETCore中。对于早期版本,必须导入Nuget包。
using System; using System.Text.Json; class Program{ static void Main(string[] args){ var point = new Point { X = 10, Y = 20 }; string jsonString = JsonSerializer.Serialize(point); Console.WriteLine(jsonString); // {"X":10,"Y":20} string formattedString = JsonSerializer.Serialize(point, new JsonSerializerOptions { WriteIndented = true }); Console.WriteLine(formattedString); string jsonData = "{\"X\":10,\"Y\":20}"; Point q = JsonSerializer.Deserialize输出结果(jsonData); Console.WriteLine(q.X + " " + q.Y); //prints1020 } } class Point{ public int X { get; set; } public int Y { get; set; } }
{"X":10,"Y":20}{ "X": 10, "Y": 20 } 10 20