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

.NET 7 Blazor WASM中JsonSerializer.Serialize不生效全局配置的原因

为什么DI配置的JsonSerializerOptions不会自动应用到JsonSerializer.Serialize?

核心原因

你遇到的情况本质是DI容器中配置的JsonSerializerOptions和JsonSerializer静态方法默认使用的实例完全无关,具体来说:

  • 直接调用JsonSerializer.Serialize的无参数/仅传类型重载时,默认使用的是静态的JsonSerializerOptions.Default实例——这是框架内置的默认配置,和你通过builder.Services.Configure<JsonSerializerOptions>注册到DI中的实例是两个完全独立的对象。
  • 通过Configure<JsonSerializerOptions>注册的选项,只是存放在DI容器中的一个自定义实例,.NET框架不会自动将它替换为JsonSerializerOptions.Default,所以手动调用静态序列化方法时,不会自动读取DI里的配置。

对应你的测试代码分析

  • JsonSerializer.Serialize<AgentaDto>(dto)、JsonSerializer.Serialize(dto)、JsonSerializer.Serialize(dto, dto.GetType()):这三个重载都默认使用JsonSerializerOptions.Default,所以你的自定义TypeInfoResolver和PropertyNameCaseInsensitive配置不会生效。
  • JsonSerializer.Serialize(dto, dto.GetType(), injectedOptions.Value):显式传入了DI中配置的JsonSerializerOptions实例,所以配置生效。
  • JsonSerializer.Serialize(dto, JsonSerializerOptions.Default):手动指定使用默认静态实例,自然不会应用你的自定义配置。

解决方案

方案1:显式注入并传入选项

保持现有方式,在需要序列化的服务中注入IOptions<JsonSerializerOptions>,调用序列化方法时显式传入该选项实例,这是最直接的方式。

方案2:封装自定义序列化服务

如果不想每次都手动传选项,可以封装一个专属的序列化服务,统一使用DI中的配置:

public class AppJsonSerializer
{
    private readonly JsonSerializerOptions _options;

    public AppJsonSerializer(IOptions<JsonSerializerOptions> options)
    {
        _options = options.Value;
    }

    public string Serialize<T>(T value)
    {
        return JsonSerializer.Serialize(value, _options);
    }

    public string Serialize(object value, Type inputType)
    {
        return JsonSerializer.Serialize(value, inputType, _options);
    }

    // 按需添加其他序列化/反序列化重载
}

在Program.cs中注册这个服务:

builder.Services.AddScoped<AppJsonSerializer>();

之后在业务服务中注入AppJsonSerializer来完成序列化:

public async Task<List<ServiceauftragDto>> GetServiceAuftraege(AgentaDto dto, AppJsonSerializer jsonSerializer) 
{
    string s = jsonSerializer.Serialize(dto); // 自动使用DI中配置的选项
    // ...
}

内容的提问来源于stack exchange,提问作者Jens Mander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:07:14