設計強大的 API 的一個關鍵方面是能夠以各種格式返回響應,以滿足不同的客戶端需求。在 API 的上下文中,序列化和反序列化對于客戶端和服務器之間的數(shù)據交換至關重要。當客戶端向 API 發(fā)出請求時,它通常需要向服務器發(fā)送數(shù)據(例如 JSON)。服務器將此數(shù)據反序列化為它可以處理的對象。當服務器響應時,它會將對象序列化回客戶端可以理解的格式(例如,JSON、XML)。

序列化是將對象轉換為易于存儲或傳輸?shù)母袷降倪^程。這可能涉及將對象轉換為字節(jié)流、JSON 字符串、XML 文檔或其他格式。序列化可以將對象的狀態(tài)保存到文件中,通過網絡發(fā)送對象,或將其存儲在數(shù)據庫中。

反序列化是相反的過程。它涉及將數(shù)據從存儲或傳輸?shù)母袷睫D換回對象。這允許使用其原始狀態(tài)和數(shù)據重建對象。

API 可以根據需求和客戶端的偏好返回各種類型的數(shù)據格式。以下是 API 可以返回的一些常見數(shù)據類型:

HTTP本身并不規(guī)定數(shù)據如何在格式上在客戶端和服務器之間傳遞;它與所使用的內容類型和編碼無關。JSON 是一種被廣泛接受的現(xiàn)代 Web API 數(shù)據交換格式,因為它具有簡單性、可讀性以及與 JavaScript 和許多其他編程語言的易用性。

以下是 HTTP 請求和響應中通常如何處理 JSON 數(shù)據:

HTTP 請求:

HTTP 響應:

編碼問題:

在 .NET 中,在中間件中配置序列化涉及設置適當?shù)男蛄谢绦蚝透袷交绦騺硖幚砀鞣N數(shù)據格式。以下是在 .NET 6 中執(zhí)行此操作的方法。

在 .NET 中間件中配置序列化的分步指南

使用 System.Text.Json 進行1. JSON序列化

System.Text.Json是 .NET Core 和 .NET 6 中的默認 JSON 序列化程序。它以其性能和低內存使用率而聞名。

2. JSON 使用 Newtonsoft.Json 進行序列化

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();

3. XML序列化

對于 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();

4. 協(xié)議緩沖區(qū) (Protobuf)

協(xié)議緩沖區(qū)用于高效的數(shù)據序列化,適用于性能關鍵型應用程序。我們需要添加包 Google.Protobuf 和 Grpc.AspNetCore 以及處理請求和響應的控制器,并將其配置為支持 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。讓我們看看下面的代碼,以同時使用 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 中間件中配置序列化涉及選擇適當?shù)男蛄谢绦虿⒃O置必要的格式化程序。通過理解和利用 System.Text.Json、Newtonsoft.Json、XML 格式化程序和協(xié)議緩沖區(qū)等庫,您可以確保您的 API 有效地處理各種數(shù)據格式,滿足不同的客戶端需求并優(yōu)化性能。這些配置和庫使開發(fā)人員能夠創(chuàng)建多功能且強大的 API,這些 API 可以有效地序列化和反序列化數(shù)據,從而增強互操作性和性能。

本文章轉載微信公眾號@dotNET跨平臺

上一篇:

使用ASP.NET Core 3.x 構建 RESTful API

下一篇:

在.NET Core中集成SignalR實現(xiàn)實時通知的API應用
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數(shù)據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費