You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5 Worker项目如何配置AddJsonOptions序列化选项?

.NET 5 Worker项目配置System.Text.Json序列化选项的正确方式

你的API项目通过AddControllers().AddJsonOptions()配置的是MVC框架专用的Json序列化规则,但Worker项目属于控制台服务类型,不会初始化MVC管道,所以之前用AddControllers/AddMvc的配置不会生效。以下是两种可行的配置方案:

方案1:注册全局JsonSerializerOptions实例

在Program.cs的ConfigureServices方法中,直接将配置好的JsonSerializerOptions注册为单例服务,后续在需要序列化/反序列化的地方注入使用:

using System.Text.Json;
using System.Text.Json.Serialization;

// ...

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        // 注册自定义Json序列化选项
        services.AddSingleton<JsonSerializerOptions>(options =>
        {
            var jsonOpts = new JsonSerializerOptions();
            jsonOpts.IgnoreNullValues = true;
            jsonOpts.Converters.Add(new JsonStringEnumConverter());
            return jsonOpts;
        });

        services.AddHostedService<Worker>();
    })
    .Build()
    .Run();

在Worker类中注入并使用:

public class Worker : BackgroundService
{
    private readonly JsonSerializerOptions _jsonOptions;

    public Worker(JsonSerializerOptions jsonOptions)
    {
        _jsonOptions = jsonOptions;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        // 序列化示例
        var data = new { Name = "Test", Status = MyEnum.Active, NullProp = null };
        var jsonStr = JsonSerializer.Serialize(data, _jsonOptions);
        
        // 反序列化示例
        var deserialized = JsonSerializer.Deserialize<MyDataModel>(jsonStr, _jsonOptions);
    }
}

方案2:针对HttpClient的Json配置(如果用到Http请求)

如果你的Worker需要通过HttpClient的ReadFromJsonAsync/PostAsJsonAsync等扩展方法处理Json,可以直接为HttpClient配置对应的选项:

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.AddHttpClient("MyHttpClient")
            .ConfigureHttpClient(client => client.BaseAddress = new Uri("https://api.example.com/"))
            .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.IgnoreNullValues = true;
                options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
            });

        services.AddHostedService<Worker>();
    })
    .Build()
    .Run();

为什么之前的配置无效?

AddControllers()和AddMvc()是为ASP.NET Core Web项目设计的,它们配置的Json选项仅会被MVC框架在处理HTTP请求时使用(比如序列化Action返回值)。Worker项目没有MVC请求管道,这些配置无法影响你手动调用JsonSerializer.Serialize/Deserialize的行为,因此不会生效。

内容的提问来源于stack exchange,提问作者İbrahim Halil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:30:52