
2024年在線市場(chǎng)平臺(tái)的11大最佳支付解決方案
設(shè)計(jì)強(qiáng)大的 API 的一個(gè)關(guān)鍵方面是能夠以各種格式返回響應(yīng),以滿足不同的客戶端需求。在 API 的上下文中,序列化和反序列化對(duì)于客戶端和服務(wù)器之間的數(shù)據(jù)交換至關(guān)重要。當(dāng)客戶端向 API 發(fā)出請(qǐng)求時(shí),它通常需要向服務(wù)器發(fā)送數(shù)據(jù)(例如 JSON)。服務(wù)器將此數(shù)據(jù)反序列化為它可以處理的對(duì)象。當(dāng)服務(wù)器響應(yīng)時(shí),它會(huì)將對(duì)象序列化回客戶端可以理解的格式(例如,JSON、XML)。
序列化是將對(duì)象轉(zhuǎn)換為易于存儲(chǔ)或傳輸?shù)母袷降倪^程。這可能涉及將對(duì)象轉(zhuǎn)換為字節(jié)流、JSON 字符串、XML 文檔或其他格式。序列化可以將對(duì)象的狀態(tài)保存到文件中,通過網(wǎng)絡(luò)發(fā)送對(duì)象,或?qū)⑵浯鎯?chǔ)在數(shù)據(jù)庫(kù)中。
反序列化是相反的過程。它涉及將數(shù)據(jù)從存儲(chǔ)或傳輸?shù)母袷睫D(zhuǎn)換回對(duì)象。這允許使用其原始狀態(tài)和數(shù)據(jù)重建對(duì)象。
API 可以根據(jù)需求和客戶端的偏好返回各種類型的數(shù)據(jù)格式。以下是 API 可以返回的一些常見數(shù)據(jù)類型:
HTTP本身并不規(guī)定數(shù)據(jù)如何在格式上在客戶端和服務(wù)器之間傳遞;它與所使用的內(nèi)容類型和編碼無(wú)關(guān)。JSON 是一種被廣泛接受的現(xiàn)代 Web API 數(shù)據(jù)交換格式,因?yàn)樗哂泻?jiǎn)單性、可讀性以及與 JavaScript 和許多其他編程語(yǔ)言的易用性。
以下是 HTTP 請(qǐng)求和響應(yīng)中通常如何處理 JSON 數(shù)據(jù):
在 .NET 中,在中間件中配置序列化涉及設(shè)置適當(dāng)?shù)男蛄谢绦蚝透袷交绦騺?lái)處理各種數(shù)據(jù)格式。以下是在 .NET 6 中執(zhí)行此操作的方法。
System.Text.Json是 .NET Core 和 .NET 6 中的默認(rèn) JSON 序列化程序。它以其性能和低內(nèi)存使用率而聞名。
Newtonsoft.Json(也稱為 Json.NET)是用于 .NET 的常用 JSON 框架。它具有高度的通用性,并因其廣泛的功能而被廣泛使用。我們需要添加 nuget 包 Microsoft.AspNetCore.Mvc.NewtonsoftJson,并在 .net 中間件中配置它,如下所示
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddNewtonsoftJson();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
對(duì)于 XML 序列化,您需要將 XML 格式化程序添加到 API 配置中。我們需要 dotnet 添加 nuget 包和配置 Microsoft.AspNetCore.Mvc.Formatters.Xml
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers()
.AddXmlSerializerFormatters(); // Add XML support
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
協(xié)議緩沖區(qū)用于高效的數(shù)據(jù)序列化,適用于性能關(guān)鍵型應(yīng)用程序。我們需要添加包 Google.Protobuf 和 Grpc.AspNetCore 以及處理請(qǐng)求和響應(yīng)的控制器,并將其配置為支持 JSON 和 XML 序列化。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
builder.Services.AddControllers();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
在 .NET 6 中,可以將中間件配置為支持多種序列化格式,例如 XML 和 JSON。讓我們看看下面的代碼,以同時(shí)使用 XML 序列化和 Newtonsoft.Json 序列化。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddNewtonsoftJson() // Add Newtonsoft.Json support
.AddXmlSerializerFormatters(); // Add XML support
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
[ApiController]
[Route("api/[controller]")]
public class OrderController : ControllerBase
{
[HttpPost]
[Produces("application/json", "application/xml")]
public IActionResult CreateOrder()
{
var contentType = Request.ContentType;
if (contentType.Contains("application/json"))
{
using var reader = new StreamReader(Request.Body);
var jsonString = reader.ReadToEnd();
var order = JsonConvert.DeserializeObject<Order>(jsonString);
if (order == null)
{
return BadRequest();
}
return Ok(order); // Return the created order in JSON
}
else if (contentType.Contains("application/xml"))
{
var serializer = new XmlSerializer(typeof(Order));
using var reader = new StreamReader(Request.Body);
var order = (Order)serializer.Deserialize(reader);
if (order == null)
{
return BadRequest();
}
return Ok(order); // Return the created order in XML
}
else
{
return UnsupportedMediaType();
}
}
}
在 .NET 中間件中配置序列化涉及選擇適當(dāng)?shù)男蛄谢绦虿⒃O(shè)置必要的格式化程序。通過理解和利用 System.Text.Json、Newtonsoft.Json、XML 格式化程序和協(xié)議緩沖區(qū)等庫(kù),您可以確保您的 API 有效地處理各種數(shù)據(jù)格式,滿足不同的客戶端需求并優(yōu)化性能。這些配置和庫(kù)使開發(fā)人員能夠創(chuàng)建多功能且強(qiáng)大的 API,這些 API 可以有效地序列化和反序列化數(shù)據(jù),從而增強(qiáng)互操作性和性能。
本文章轉(zhuǎn)載微信公眾號(hào)@dotNET跨平臺(tái)
2024年在線市場(chǎng)平臺(tái)的11大最佳支付解決方案
完整指南:如何在應(yīng)用程序中集成和使用ChatGPT API
選擇AI API的指南:ChatGPT、Gemini或Claude,哪一個(gè)最適合你?
用ASP.NET Core 2.1 建立規(guī)范的 REST API — 緩存和并發(fā)
企業(yè)工商數(shù)據(jù)API用哪種?
2024年創(chuàng)建社交媒體帖子的最佳圖像工具API
2024年小型企業(yè)的7個(gè)最佳短信應(yīng)用API
用gin寫簡(jiǎn)單的crud后端API接口
最新LangChain+GLM4開發(fā)AI應(yīng)用程序系列(一):快速入門篇
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)