C#反序列化json后提取数组
时间: 2025-06-23 15:24:58 浏览: 13
### 使用 C# 反序列化 JSON 并提取数组
在 C# 中,反序列化 JSON 数据并从中提取数组可以通过多种方式完成。以下是两种常用的方法:一种是使用 `Newtonsoft.Json` 库[^3],另一种则是利用 `.NET Core 3.0` 推出的原生库 `System.Text.Json`[^2]。
#### 方法一:使用 Newtonsoft.Json 进行反序列化
为了简化开发过程中的 JSON 处理工作,许多开发者会选择第三方库 `Newtonsoft.Json` 来帮助解析复杂的 JSON 结构。首先需要确保已安装该 NuGet 包;接着定义一个匹配目标 JSON 的模型类用于映射数据字段。下面是一个简单的例子:
假设有一个表示书籍列表的 JSON 字符串如下所示:
```json
[
{"Title": "Book One", "Author": "Author A"},
{"Title": "Book Two", "Author": "Author B"}
]
```
创建相应的 C# 模型类 Book.cs 如下:
```csharp
public class Book {
public string Title { get; set; }
public string Author { get; set; }
}
```
接下来编写一段代码片段来展示如何读取上述 JSON 文本并将它转换成 List<Book> 集合对象:
```csharp
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
class Program {
static void Main() {
var jsonString = "[{\"Title\": \"Book One\", \"Author\": \"Author A\"},{\"Title\": \"Book Two\", \"Author\": \"Author B\"}]";
// 将 JSON 字符串反序列化为 Book 列表
List<Book> books = JsonConvert.DeserializeObject<List<Book>>(jsonString);
foreach (var book in books) {
Console.WriteLine($"书名: {book.Title}, 作者: {book.Author}");
}
}
}
```
此方法适用于大多数场景下的简单到复杂类型的 JSON 解析需求,并且提供了丰富的配置选项支持自定义行为。
#### 方法二:使用 System.Text.Json 实现相同功能
对于不需要额外依赖外部库的应用程序来说,可以直接采用内置的支持更好的性能特性的 `System.Text.Json` API 完成同样的任务。这里同样给出基于之前提到的那个 JSON 输入的例子:
```csharp
using System;
using System.Collections.Generic;
using System.Text.Json;
class Program {
static void Main() {
var jsonString = "[{\"Title\": \"Book One\", \"Author\": \"Author A\"},{\"Title\": \"Book Two\", \"Author\": \"Author B\"}]";
// 创建 JsonDocument 对象以便于访问文档结构
using (JsonDocument doc = JsonDocument.Parse(jsonString)) {
// 初始化集合存储结果
List<Book> books = new();
// 遍历根级元素(这里是数组)
foreach (JsonElement element in doc.RootElement.EnumerateArray()) {
// 添加新实例至列表中
books.Add(new Book{
Title = element.GetProperty("Title").GetString(),
Author = element.GetProperty("Author").GetString()
});
}
// 输出每本书的信息
foreach (var book in books) {
Console.WriteLine($"书名: {book.Title}, 作者: {book.Author}");
}
}
}
}
// 声明相同的 Book 类作为载体
public class Book {
public string Title { get; set; }
public string Author { get; set; }
}
```
这段代码展示了不借助任何第三方组件的情况下也能轻松处理来自网络或其他来源传入的标准格式化的 JSON 流的能力。
阅读全文
相关推荐


















