C Sharp JSON 处理
C# JSON处理[编辑 | 编辑源代码]
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。在C#中,处理JSON数据是常见的任务,特别是在Web API、配置文件和数据存储等场景中。本文将详细介绍如何在C#中处理JSON数据,包括序列化、反序列化以及使用流行库(如Newtonsoft.Json和System.Text.Json)的方法。
介绍[编辑 | 编辑源代码]
JSON是一种基于文本的格式,使用键值对表示数据。它通常用于客户端和服务器之间的数据传输,或存储配置信息。C#提供了多种方式来处理JSON数据,包括内置的`System.Text.Json`库和第三方库`Newtonsoft.Json`(也称为Json.NET)。
JSON示例:
{
"name": "John Doe",
"age": 30,
"isStudent": false,
"courses": ["Math", "Science", "History"]
}
在C#中,JSON数据可以映射到对象或集合,反之亦然。这种转换称为序列化(将对象转为JSON)和反序列化(将JSON转为对象)。
使用System.Text.Json[编辑 | 编辑源代码]
`System.Text.Json`是.NET Core 3.0及更高版本中内置的JSON处理库,性能较高且无需安装额外依赖。
反序列化JSON[编辑 | 编辑源代码]
将JSON字符串转换为C#对象:
using System;
using System.Text.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public bool IsStudent { get; set; }
public string[] Courses { get; set; }
}
string json = @"{
""name"": ""John Doe"",
""age"": 30,
""isStudent"": false,
""courses"": [""Math"", ""Science"", ""History""]
}";
Person person = JsonSerializer.Deserialize<Person>(json);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
输出:
Name: John Doe, Age: 30
序列化为JSON[编辑 | 编辑源代码]
将C#对象转换为JSON字符串:
Person person = new Person
{
Name = "Jane Smith",
Age = 25,
IsStudent = true,
Courses = new[] { "Art", "Music" }
};
string json = JsonSerializer.Serialize(person);
Console.WriteLine(json);
输出:
{"Name":"Jane Smith","Age":25,"IsStudent":true,"Courses":["Art","Music"]}
自定义序列化选项[编辑 | 编辑源代码]
可以通过`JsonSerializerOptions`自定义序列化行为,例如格式化输出或忽略空值:
var options = new JsonSerializerOptions
{
WriteIndented = true,
IgnoreNullValues = true
};
string json = JsonSerializer.Serialize(person, options);
Console.WriteLine(json);
输出:
{
"Name": "Jane Smith",
"Age": 25,
"IsStudent": true,
"Courses": ["Art", "Music"]
}
使用Newtonsoft.Json[编辑 | 编辑源代码]
`Newtonsoft.Json`是一个流行的第三方库,功能丰富且兼容性广。
安装[编辑 | 编辑源代码]
通过NuGet安装:
Install-Package Newtonsoft.Json
反序列化JSON[编辑 | 编辑源代码]
using Newtonsoft.Json;
string json = @"{
'name': 'John Doe',
'age': 30,
'isStudent': false,
'courses': ['Math', 'Science', 'History']
}";
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
序列化为JSON[编辑 | 编辑源代码]
Person person = new Person
{
Name = "Jane Smith",
Age = 25,
IsStudent = true,
Courses = new[] { "Art", "Music" }
};
string json = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(json);
输出:
{
"Name": "Jane Smith",
"Age": 25,
"IsStudent": true,
"Courses": ["Art", "Music"]
}
高级特性[编辑 | 编辑源代码]
Newtonsoft.Json支持更多高级特性,如自定义转换器、动态对象处理和条件序列化:
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
Formatting = Formatting.Indented
};
string json = JsonConvert.SerializeObject(person, settings);
实际应用案例[编辑 | 编辑源代码]
从API读取JSON数据[编辑 | 编辑源代码]
以下示例展示如何从Web API获取JSON数据并反序列化为对象:
using System.Net.Http;
using System.Threading.Tasks;
public async Task<Person> GetPersonAsync(string url)
{
using (HttpClient client = new HttpClient())
{
string json = await client.GetStringAsync(url);
return JsonSerializer.Deserialize<Person>(json);
}
}
配置文件处理[编辑 | 编辑源代码]
JSON常用于存储应用程序配置:
public class AppConfig
{
public string LogPath { get; set; }
public int MaxRetries { get; set; }
}
string configJson = File.ReadAllText("config.json");
AppConfig config = JsonSerializer.Deserialize<AppConfig>(configJson);
性能比较[编辑 | 编辑源代码]
`System.Text.Json`通常比`Newtonsoft.Json`更快且内存效率更高,但后者功能更丰富。以下是一个简单的性能对比:
总结[编辑 | 编辑源代码]
JSON处理是C#开发中的核心技能之一。本文介绍了两种主要方法: 1. **System.Text.Json**:高性能,内置支持,适合新项目。 2. **Newtonsoft.Json**:功能丰富,兼容性强,适合需要高级特性的场景。
根据项目需求选择合适的库,并合理使用序列化和反序列化技术。