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

如何在.NET Core 3.1服务类中注入配置好的JsonConvert?

在.NET Core 3.1服务类中复用Newtonsoft.Json序列化配置

你当前每次调用LogEvent都创建新的JsonSerializerSettings和StringEnumConverter,虽然单次调用影响不大,但高频场景下会产生不必要的临时对象,增加GC负担,确实有优化空间。可以通过两种方式实现全局配置或复用配置,不用每次重复创建:

方式一:全局设置JsonConvert默认配置

直接在Startup.cs的ConfigureServices中配置JsonConvert.DefaultSettings,这样所有JsonConvert.SerializeObject的调用都会自动使用这个全局配置:

public void ConfigureServices(IServiceCollection services)
{
    // 其他服务注册代码...
    
    // 全局配置Newtonsoft.Json序列化规则
    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
    {
        Converters = { new Newtonsoft.Json.Converters.StringEnumConverter() },
        NullValueHandling = NullValueHandling.Ignore
    };
}

之后你的服务类代码可以简化回最初的写法,无需手动传配置:

private void LogEvent(object properties, LogLevel logLevel)
{
    var message = JsonConvert.SerializeObject(properties);
    _logger.Log(logLevel, message);
}

方式二:将配置好的JsonSerializerSettings注册为单例服务

如果更倾向于依赖注入的模式(方便单元测试替换配置),可以把配置好的JsonSerializerSettings注册为单例,注入到服务类中使用:

1. 在Startup中注册服务

public void ConfigureServices(IServiceCollection services)
{
    // 其他服务注册代码...
    
    // 注册序列化配置为单例
    services.AddSingleton<JsonSerializerSettings>(sp => new JsonSerializerSettings
    {
        Converters = { new Newtonsoft.Json.Converters.StringEnumConverter() },
        NullValueHandling = NullValueHandling.Ignore
    });
}

2. 在服务类中注入并使用

private readonly ILogger _logger;
private readonly JsonSerializerSettings _jsonSettings;

// 通过构造函数注入配置
public YourService(ILogger<YourService> logger, JsonSerializerSettings jsonSettings)
{
    _logger = logger;
    _jsonSettings = jsonSettings;
}

private void LogEvent(object properties, LogLevel logLevel)
{
    var message = JsonConvert.SerializeObject(properties, Formatting.None, _jsonSettings);
    _logger.Log(logLevel, message);
}

注意事项

你提到的AddJsonOptions是用来配置.NET Core MVC框架处理HTTP请求/响应时的序列化规则,和JsonConvert静态方法的序列化逻辑不共享,所以不能直接用它来配置服务类中的JsonConvert调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:35:49