在 ASP.NET Web 应用中解析 JSON 数据有多种方法,取决于你使用的是传统的 Web Forms、MVC 还是现代的 Web API。以下是几种常见的解析方法:
1. 使用 Newtonsoft.Json (Json.NET)
这是最常用的 JSON 处理库,需要先安装 NuGet 包:
bash
Install-Package Newtonsoft.Json
反序列化 JSON 到对象
cs
using Newtonsoft.Json;
// JSON 字符串
string json = @"{
'Name': 'John Doe',
'Age': 30,
'Email': '[email protected]'
}";
// 定义对应的类
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
// 反序列化
Person person = JsonConvert.DeserializeObject<Person>(json);
序列化对象到 JSON
cs
Person person = new Person
{
Name = "Jane Smith",
Age = 28,
Email = "[email protected]"
};
string json = JsonConvert.SerializeObject(person);
2. 使用 .NET 内置的 System.Text.Json (适用于 .NET Core 3.0+)
cs
using System.Text.Json;
// 反序列化
Person person = JsonSerializer.Deserialize<Person>(json);
// 序列化
string json = JsonSerializer.Serialize(person);
3. 在 ASP.NET Web API 中自动处理 JSON
在 Web API 控制器中,框架会自动处理 JSON 的序列化和反序列化:
cs
public class UsersController : ApiController
{
// POST api/users
public IHttpActionResult PostUser(Person person)
{
// person 参数会自动从请求的 JSON 体反序列化
// 处理逻辑...
return Ok();
}
// GET api/users/1
public IHttpActionResult GetUser(int id)
{
Person person = GetPersonFromDatabase(id);
return Ok(person); // 自动序列化为 JSON
}
}
4. 在 ASP.NET MVC 中处理 JSON
接收 JSON 数据
cs
[HttpPost]
public ActionResult ProcessJson()
{
using (var reader = new StreamReader(Request.InputStream))
{
string json = reader.ReadToEnd();
var person = JsonConvert.DeserializeObject<Person>(json);
// 处理逻辑...
}
return Json(new { success = true });
}
返回 JSON 结果
cs
public ActionResult GetUser(int id)
{
Person person = GetPersonFromDatabase(id);
return Json(person, JsonRequestBehavior.AllowGet);
}
5. 在客户端使用 JavaScript 处理
javascript
// 发送 JSON 数据到服务器
$.ajax({
url: '/api/users',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ Name: "John", Age: 30 }),
success: function(response) {
console.log(response);
}
});
// 接收服务器返回的 JSON
$.getJSON('/api/users/1', function(data) {
console.log(data.Name);
});
注意事项
-
确保请求和响应的 Content-Type 设置为
application/json
-
对于大型 JSON 数据,考虑使用流式处理而不是一次性加载到内存
-
处理 JSON 时要考虑安全性,防范 JSON 注入攻击
-
对于复杂的 JSON 结构,确保你的模型类与之匹配
以上方法适用于不同版本的 ASP.NET,选择哪种取决于你的项目类型和 .NET 版本。