簡體   English   中英

在 ASP.NET Core MVC 控制器中使用序列化程序?

[英]Use serializer within ASP.NET Core MVC controller?

ASP.NET Core MVC 序列化從我的Microsoft.AspNetCore.Mvc.ControllerBase控制器方法返回的響應。

因此,以下內容會將MyDTO對象序列化為 JSON:

[Produces("application/json")]
[HttpGet]
public MyDTO test() 
{
    return new MyDTO();
}

但是,我想在方法本身中使用完全相同的序列化程序。 那可能嗎? 就像是

[Produces("application/json")]
[HttpGet]
public MyDTO test() 
{
    var result = new MyDTO();
    string serialized = this.<SOMETHING GOES HERE>(result);
    Console.WriteLine($"I'm about to return {serialized}");
    return result;
}

重要的是它是相同的序列化程序,包括堆棧中設置的任何選項。

不要認為這是可能的,因為它隱藏在IActionResultExecutor<JsonResult> 默認將是SystemTextJsonResultExecutor但在使用時可能會在啟動時被覆蓋,例如.AddNewtonsoftJson(...) ...

您可以在startup.cs顯式設置 Json 格式選項,然后在需要序列化的其他地方使用相同的選項。 這樣所有的序列化都將以完全相同的方式完成。


例如,如果您使用的是JsonSerializer

public static class JsonSerializerExtensions
{
    public static JsonOptions ConfigureJsonOptions(this JsonOptions options)
    {
        // your configuration
        options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.WriteAsString;
        return options;
    }
}

startup.cs

services
    .AddControllers()
    .AddJsonOptions(options => options.ConfigureJsonOptions());

Conroller.cs

string serialized =JsonSerializer.Serialize(new MyDTO(), options: new JsonOptions().ConfigureJsonOptions().JsonSerializerOptions);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM