列举Newtonsoft.Json库常用类和方法,用C#代码展示
时间: 2025-02-21 09:29:47 浏览: 50
<think>好的,我现在需要回答用户关于Newtonsoft.Json(Json.NET)库的常用类和方法,并用C#代码展示。首先,我得回忆一下自己对这个库的了解,确保信息准确。
用户可能想要快速了解这个库的核心部分,所以应该重点介绍常用的类,比如JToken、JObject、JArray,以及JsonConvert等。然后,每个类常用的方法需要列举,并给出代码示例。需要注意代码的正确性和简洁性,让用户容易理解。
首先,JsonConvert类是最常用的,用于序列化和反序列化对象。应该展示SerializeObject和DeserializeObject方法。例如,如何将一个对象转换成JSON字符串,以及如何将JSON字符串转回对象。
接下来是JObject,用于动态处理JSON。可能需要演示如何创建JObject,添加属性,获取值,以及解析字符串为JObject。比如JObject.Parse方法,还有如何通过键来访问值。
然后是JArray,处理JSON数组。需要展示如何创建JArray,添加元素,遍历,或者从字符串解析。例如,JArray.Parse的使用。
JToken可能作为基类,用于处理各种JSON元素,比如访问路径SelectToken方法。例如,使用JObject.SelectToken来获取嵌套属性。
此外,用户可能需要了解如何从文件读写JSON,这涉及到JsonSerializer类,用StreamReader/StreamWriter来操作。比如使用JsonSerializer.Deserialize从文件中读取数据。
需要注意代码示例的多样性,涵盖不同的使用场景,比如动态构建JSON、处理嵌套结构、文件操作等。同时,要指出命名空间Newtonsoft.Json和Newtonsoft.Json.Linq,确保用户知道需要引入哪些命名空间。
还要考虑代码的正确性,比如异常处理是否需要包含?可能不需要,示例代码以简洁为主。另外,是否有常见的陷阱需要提醒,比如日期格式、循环引用?可能用户的问题不涉及这些,但如果有余力,可以简短提及设置选项,如DateFormatHandling或ReferenceLoopHandling,但主要先回答用户的问题。
最后,总结各个类和方法的用途,帮助用户形成整体认识。确保每个代码示例都有注释说明,这样用户容易理解每段代码的作用。</think>以下是 Newtonsoft.Json(Json.NET)库的常用类和方法介绍,附带 C# 代码示例:
---
### **1. JsonConvert 类**(最常用)
用于快速序列化和反序列化对象。
```csharp
using Newtonsoft.Json;
// 序列化对象为 JSON 字符串
var person = new { Name = "Alice", Age = 30 };
string json = JsonConvert.SerializeObject(person);
// 输出: {"Name":"Alice","Age":30}
// 反序列化 JSON 为对象
var obj = JsonConvert.DeserializeObject<Person>(json);
public class Person { public string Name { get; set; } public int Age { get; set; } }
```
---
### **2. JObject 类**(动态操作 JSON)
动态构建或解析 JSON 对象。
```csharp
using Newtonsoft.Json.Linq;
// 动态创建 JSON
JObject jObject = new JObject();
jObject["Name"] = "Bob";
jObject["Age"] = 25;
Console.WriteLine(jObject.ToString());
// 输出: {"Name":"Bob","Age":25}
// 解析 JSON 字符串
var jsonStr = "{\"Email\":\"[email protected]\"}";
JObject parsed = JObject.Parse(jsonStr);
string email = parsed["Email"].Value<string>(); // 获取值
```
---
### **3. JArray 类**(处理 JSON 数组)
操作 JSON 数组结构。
```csharp
// 创建 JSON 数组
JArray jArray = new JArray();
jArray.Add("Apple");
jArray.Add("Banana");
Console.WriteLine(jArray.ToString()); // 输出: ["Apple","Banana"]
// 解析数组字符串
var jsonArr = "[{\"Id\":1}, {\"Id\":2}]";
JArray parsedArr = JArray.Parse(jsonArr);
foreach (var item in parsedArr) {
Console.WriteLine(item["Id"]); // 输出: 1 2
}
```
---
### **4. JToken 和 SelectToken**(查询嵌套数据)
通过路径查询嵌套 JSON。
```csharp
var json = @"
{
"Department": {
"Name": "IT",
"Employees": [
{ "Name": "Charlie" }
]
}
}";
JObject root = JObject.Parse(json);
string deptName = root.SelectToken("Department.Name").Value<string>(); // "IT"
string empName = root.SelectToken("Department.Employees[0].Name").Value<string>(); // "Charlie"
```
---
### **5. JsonSerializer 类**(流式处理)
用于高级控制(如文件流操作)。
```csharp
using Newtonsoft.Json;
using System.IO;
// 从文件读取并反序列化
using (StreamReader file = File.OpenText("data.json")) {
JsonSerializer serializer = new JsonSerializer();
Person person = (Person)serializer.Deserialize(file, typeof(Person));
}
// 序列化到文件
using (StreamWriter file = File.CreateText("output.json")) {
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, person);
}
```
---
### **常用设置选项**
通过 `JsonSerializerSettings` 自定义行为:
```csharp
var settings = new JsonSerializerSettings {
Formatting = Formatting.Indented, // 美化缩进
NullValueHandling = NullValueHandling.Ignore, // 忽略空值
DateFormatString = "yyyy-MM-dd" // 日期格式
};
string json = JsonConvert.SerializeObject(obj, settings);
```
---
### **总结**
- **JsonConvert**:快速序列化/反序列化。
- **JObject/JArray**:动态构建和查询 JSON。
- **SelectToken**:通过路径访问嵌套数据。
- **JsonSerializer**:流式处理和大文件优化。
通过组合这些类,可以高效处理大多数 JSON 操作场景。
阅读全文
相关推荐


















