如何在 .NET 中使用 XML 和 JSON?


使用 JSON

JSON 是一种数据格式,已成为 XML 的一种流行替代方案。它简单明了,语法类似于 JavaScript 对象。事实上,JSON 代表 JavaScript 对象表示法。最新版本的 .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 类的一个实例,您将使用 JsonSerializer 类中定义的 Serialize() 方法,该方法位于 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<T> 方法。例如,

string jsonData = "{\"X\":10,\"Y\":20}";
Point q = JsonSerializer.Deserialize<Point>(jsonData);
Console.WriteLine(q.X + " " + q.Y); // prints 10 20

使用 XML

XML 是一种非常流行的数据格式,用于存储和传输数据。.NET 提供了许多 API 用于在 C# 编程语言中使用 XML。Linq to XML 是通用 XML 处理的主要机制。它提供了一个轻量级、Linq 友好的 XML 文档对象模型以及一组查询运算符。System.XML.Linq 命名空间包含与 Linq to XML 相关的类型。

考虑以下 XML 数据。它有一个根元素 employee,具有两个属性 id 和 status,其值分别为 '231' 和 'active'。该元素有三个子元素:firstname、lastname 和 salary。

<?xml version="1.0" encoding="utf-8"?>
<employee id="231" status="active">
<firstname>David</firstname>
<lastname>Block</lastname>
<salary>45000</salary>
</employee>

Linq to XML API 解析 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
<employee id="123" status="active">
   <firstname>David</firstname>
   <lastname>Block</lastname>
   <salary>45000</salary>
</employee>%
*/

示例

注意:JSON 库仅包含在 .NET Core 中。对于早期版本,必须导入 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<Point>(jsonData);
      Console.WriteLine(q.X + " " + q.Y); // prints 10 20
   }
}
class Point{
   public int X { get; set; }
   public int Y { get; set; }
}

输出

{"X":10,"Y":20}{
   "X": 10,
   "Y": 20
}
10 20

更新于: 2021年5月19日

917 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.