HttpClient 使用Json數據
現代Web項目中,Json是最常用的數據格式。不論是前后端的交互中,還是純前端項目中,都是如此。因此,.Net HttpClient 能不能更加方便、快捷的處理Json格式數據,也就至關重要了!
文末有視頻效果
本文目錄
- HttpClient 使用Json數據
- 初始化
- 手動管理 Json 數據
- 使用相關類庫, 管理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數據