UWP C#使用System.Net.Http发送原生JSON列表的实现方案
C# 10 + .NET 5 环境下直接发送JSON列表POST请求的方案
核心实现思路
直接使用System.Net.Http.Json库提供的原生扩展方法,无需手动将列表对象序列化为JSON字符串,方法底层会自动完成序列化、设置请求头的操作。
前置准备
- 项目需引用
System.Net.Http.Json包,.NET 5 版本可直接安装对应5.0.0版本的NuGet包,也可在项目文件中添加如下引用:<PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
完整代码示例
1. 定义业务数据模型(示例)
// 可替换为你实际的业务类结构 public class GoodsItem { public int GoodsId { get; set; } public string GoodsName { get; set; } public decimal Price { get; set; } public int Stock { get; set; } }
2. 发送POST请求代码
using System.Net.Http; using System.Net.Http.Json; // 必须引入该命名空间才能使用扩展方法 using System.Text.Json; // 注意:生产环境建议通过IHttpClientFactory获取HttpClient实例,避免每次new导致套接字资源耗尽 var httpClient = new HttpClient { BaseAddress = new Uri("https://你的目标接口域名/") }; // 直接构造原生List对象,无需手动转JSON字符串 var postList = new List<GoodsItem> { new GoodsItem { GoodsId = 1, GoodsName = "鲜牛奶", Price = 12.9m, Stock = 100 }, new GoodsItem { GoodsId = 2, GoodsName = "全麦面包", Price = 8.9m, Stock = 50 } }; try { // 直接调用PostAsJsonAsync方法,传入接口路径、列表对象即可完成JSON列表的发送 HttpResponseMessage response = await httpClient.PostAsJsonAsync("api/goods/batch-add", postList); // 校验请求是否成功 response.EnsureSuccessStatusCode(); // 可选:读取接口返回的JSON结果 var responseResult = await response.Content.ReadFromJsonAsync<YourResponseType>(); } catch (HttpRequestException e) { // 自定义处理请求异常 Console.WriteLine($"请求失败:{e.Message}"); }
自定义序列化配置
如果需要调整JSON序列化规则,比如使用驼峰命名、忽略空值等,可传入JsonSerializerOptions参数:
var serializeOptions = new JsonSerializerOptions { // 序列化属性为驼峰命名 PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 忽略值为null的属性 IgnoreNullValues = true, // 不格式化JSON(减少请求体积) WriteIndented = false }; // 传入配置参数发送请求 var response = await httpClient.PostAsJsonAsync("api/goods/batch-add", postList, serializeOptions);
额外说明
PostAsJsonAsync方法会自动添加Content-Type: application/json请求头,无需手动设置- 发送的列表对象没有类型限制,所有可序列化的泛型集合都可以直接传入
内容的提问来源于stack exchange,提问作者CosmicPredator
相关产品推荐
相关产品推荐

