HttpClient 使用Json数据
现代Web项目中,Json是最常用的数据格式。不论是前后端的交互中,还是纯前端项目中,都是如此。因此,.Net HttpClient 能不能更加方便、快捷的处理Json格式数据,也就至关重要了!
文末有视频效果
手动处理Json数据,也是可以的,只不过需要服务端配合、比较繁杂,与使用框架提供的相关类库操作并没有本质区别,只不过使用框架更方便、稳定!
.Net HttpClient 提供了一流的Json数据支持:
- System.Net.Http.Json 提供了序列化和反序列化 Json 数据功能
- Microsoft.Extensions.Http 扩展库,提供了发送请求和接收响应时,对Json数据的扩展支持
- Microsoft.Net.Http.Headers 提供请求或响应头的一些枚举及帮功能
初始化
#!import "./Ini.ipynb"
手动管理 Json 数据
借助
System.Net.Http.Json
或者Newtonsoft.Json
类库,手动管理(序列化、反序列化等)Json数据也是可以的。
- 在请求中使用Json数据
在请求中使用json数据,基本就是指在请求体中使用json。url参数、路由参数、请求头中,很少使用json数据;当然,如果使用也是可以的,只要服务端配合就行!
#r "nuget:Newtonsoft.Json"
{ //手动管理json
//参数对象
var postData = new
{
id = 1,
name = "小品王"
};
//手动转为json字符串
var textJsonData = Newtonsoft.Json.JsonConvert.SerializeObject(postData);
//请求内容
var requestContent = new StringContent(textJsonData, Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json);
//发送请求
var response = await SharedClient.PostAsync("/api/AdvancedPost/JsonData", requestContent);
//读取响应内容
var content = await response.Content.ReadAsStringAsync();
//输出响应内容
Console.WriteLine(content);
}
- 使用Json格式响应数据
#r "nuget:Newtonsoft.Json"
{ //手动管理json
//参数对象
var postData = new
{
id = 2,
name = "线程张"
};
//手动转为json字符串
var textJsonData = Newtonsoft.Json.JsonConvert.SerializeObject(postData);
//请求内容
var requestContent = new StringContent(textJsonData, Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json);
//发送请求
var response = await SharedClient.PostAsync("/api/AdvancedPost/JsonData", requestContent);
//读取响应内容
var content = await response.Content.ReadAsStringAsync();
//手动反序列化Json为匿名对象(System.Text.Json不支持)
var responseObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(content,postData);
//输出响应内容
Console.WriteLine(content);
}
使用相关类库, 管理Json数据
.Net框架,提供了丰富的 Json 类库,使得在HttpClient中进行jsonr操作非常方便、好用!
注意: 确保引入了 Microsoft.Extensions.Http 类库
- 在请求中使用json数据
{ //引入 Microsoft.Extensions.Http
//参数对象
var postData = new
{
id = 2,
name = "线程张"
};
//请求内容
var requestContent = JsonContent.Create(postData);
//发送请求
var response = await SharedClient.PostAsync("/api/AdvancedPost/JsonData", requestContent);
//读取响应内容
var content = await response.Content.ReadAsStringAsync();
//手动反序列化Json为匿名对象(System.Text.Json不支持)
var responseObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(content,postData);
//输出响应内容
Console.WriteLine(content);
}
- 使用响应中的json数据
{ //引入 Microsoft.Extensions.Http
//参数对象
var postData = new
{
id = 2,
name = "线程张"
};
//请求内容
var requestContent = JsonContent.Create(postData);
//发送请求
var response = await SharedClient.PostAsync("/api/AdvancedPost/JsonData", requestContent);
//读取响应内容,并且转为对象
var contentObject = await response.Content.ReadFromJsonAsync(postData.GetType());
contentObject.Display();
}
总结
无论是手动处理 JSON 数据,还是借助框架类库进行管理,其核心原理并无本质区别,都是围绕接收和响应这种特定格式的数据展开的。
掌握"发送请求"和"接收响应"这两个核心操作后,处理JSON数据就会变得轻而易举。
当然了,还是推荐使用框架提供的类库,非常方便、快捷,且不容出错!毕竟,框架类库的质量还是非常高的!
视频演示
C# HttpClient 使用Json数据