You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
HttpClientStudy/Docs/1.3.4.基础使用.使用Json.ipynb

327 lines
8.2 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"# HttpClient 使用Json数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"现代Web中Json是最常用的前后端交互数据。\n",
"\n",
"手动处理Json数据也是可以的只不过需要服务端配合、比较繁杂与使用框架提供的相关类库操作并没有本质区别只不过使用框架更方便、稳定\n",
"\n",
".Net HttpClient 提供了一流的Json数据支持\n",
"\n",
"+ System.Net.Http.Json 提供了序列化和反序列化 Json 数据功能\n",
"+ Microsoft.Extensions.Http 扩展库提供了发送请求和接收响应时对Json数据的扩展支持\n",
"+ Microsoft.Net.Http.Headers 提供请求或响应头的一些枚举及帮功能"
]
},
{
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"source": [
"## 初始化"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"outputs": [],
"source": [
"#!import \"./Ini.ipynb\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 手动管理 Json 数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"借助 `System.Net.Http.Json` 或者 `Newtonsoft.Json`类库,手动管理(序列化、反序列化等)Json数据也是可以的。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"+ 在请求中使用Json数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 在请求中使用json数据基本就是指在请求体中使用json。url参数、路由参数、请求头中很少使用json数据当然如果使用也是可以的只要服务端配合就行"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"outputs": [],
"source": [
"#r \"nuget:Newtonsoft.Json\"\n",
"\n",
"{ //手动管理json\n",
"\n",
" //参数对象\n",
" var postData = new \n",
" {\n",
" id = 1,\n",
" name = \"小品王\"\n",
" };\n",
"\n",
" //手动转为json字符串\n",
" var textJsonData = Newtonsoft.Json.JsonConvert.SerializeObject(postData);\n",
"\n",
" //请求内容\n",
" var requestContent = new StringContent(textJsonData, Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); \n",
"\n",
" //发送请求\n",
" var response = await SharedClient.PostAsync(\"/api/AdvancedPost/JsonData\", requestContent);\n",
"\n",
" //读取响应内容\n",
" var content = await response.Content.ReadAsStringAsync();\n",
"\n",
" //输出响应内容\n",
" Console.WriteLine(content);\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"+ 使用Json格式响应数据"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"outputs": [],
"source": [
"#r \"nuget:Newtonsoft.Json\"\n",
"\n",
"{ //手动管理json\n",
"\n",
" //参数对象\n",
" var postData = new \n",
" {\n",
" id = 2,\n",
" name = \"线程张\"\n",
" };\n",
"\n",
" //手动转为json字符串\n",
" var textJsonData = Newtonsoft.Json.JsonConvert.SerializeObject(postData);\n",
"\n",
" //请求内容\n",
" var requestContent = new StringContent(textJsonData, Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); \n",
"\n",
" //发送请求\n",
" var response = await SharedClient.PostAsync(\"/api/AdvancedPost/JsonData\", requestContent);\n",
"\n",
" //读取响应内容\n",
" var content = await response.Content.ReadAsStringAsync();\n",
"\n",
" //手动反序列化Json为匿名对象(System.Text.Json不支持)\n",
" var responseObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(content,postData);\n",
"\n",
" //输出响应内容\n",
" Console.WriteLine(content);\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 使用相关类库, 管理Json数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
".Net框架提供了丰富的 Json 类库使得在HttpClient中进行jsonr操作非常方便、好用!\n",
"\n",
"确保引入了 Microsoft.Extensions.Http 类库"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"+ 在请求中使用json数据"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"outputs": [],
"source": [
"{ //引入 Microsoft.Extensions.Http\n",
"\n",
" //参数对象\n",
" var postData = new \n",
" {\n",
" id = 2,\n",
" name = \"线程张\"\n",
" };\n",
"\n",
" //请求内容\n",
" var requestContent = JsonContent.Create(postData); \n",
"\n",
" //发送请求\n",
" var response = await SharedClient.PostAsync(\"/api/AdvancedPost/JsonData\", requestContent);\n",
"\n",
" //读取响应内容\n",
" var content = await response.Content.ReadAsStringAsync();\n",
"\n",
" //手动反序列化Json为匿名对象(System.Text.Json不支持)\n",
" var responseObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(content,postData);\n",
"\n",
" //输出响应内容\n",
" Console.WriteLine(content);\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"+ 使用响应中的json数据"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"outputs": [],
"source": [
"{ //引入 Microsoft.Extensions.Http\n",
"\n",
" //参数对象\n",
" var postData = new \n",
" {\n",
" id = 2,\n",
" name = \"线程张\"\n",
" };\n",
"\n",
" //请求内容\n",
" var requestContent = JsonContent.Create(postData); \n",
"\n",
" //发送请求\n",
" var response = await SharedClient.PostAsync(\"/api/AdvancedPost/JsonData\", requestContent);\n",
"\n",
" //读取响应内容,并且转为对象\n",
" var contentObject = await response.Content.ReadFromJsonAsync(postData.GetType());\n",
"\n",
" contentObject.Display();\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 总结\n",
"\n",
"不论是手动管理json还是利用框架类库来管理其原理都是一样的无非是接受和响应json这种特定格式的数据。\n",
"\n",
"只要熟悉了\"发送请求\"和\"接受响应\"json数据就非常容易。\n",
"\n",
"当然了,还是推荐使用框架提供的类库,非常方便、快捷,且不容出错!毕竟,框架类库的质量还是非常高的!"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".NET (C#)",
"language": "C#",
"name": ".net-csharp"
},
"language_info": {
"name": "python"
},
"polyglot_notebook": {
"kernelInfo": {
"defaultKernelName": "csharp",
"items": [
{
"aliases": [],
"name": "csharp"
}
]
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}