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

.NET 5应用如何从appsettings.json中读取DateTime类型配置值

问题根因

默认.NET配置系统的DateTime类型转换逻辑依赖运行环境的区域文化设置,你配置里用的dd.MM.yyyy HH:mm:ss格式和当前环境的默认日期格式不匹配,所以解析失败。


解决方案

方案1:修改配置为ISO 8601通用格式(最推荐,无代码侵入)

直接把appsettings.json里的日期改为国际通用的ISO 8601格式,无需修改任何业务代码,配置系统默认支持该格式:

"TimeModel": {
  "RestartDuration": "2021-10-27T12:30:00"
}

方案2:保留原有日期格式,手动解析转换

如果业务要求必须保留dd.MM.yyyy HH:mm:ss的配置格式,可以先把模型属性定义为string类型,使用时手动指定格式解析:

  1. 调整TimeModel类定义:
public class TimeModel
{
    public string RestartDuration { get; set; }
    // 新增只读属性返回DateTime类型
    public DateTime RestartDurationValue => DateTime.ParseExact(RestartDuration, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);
}
  1. 原有配置注册代码不需要改动。

方案3:自定义配置绑定转换器(适合大量同格式日期配置的场景)

如果项目里有大量同格式的DateTime配置,不想逐个手动解析,可以自定义全局配置转换器:

  1. 实现自定义DateTime转换器:
public class CustomDateTimeConverter : ConfigurationConverterBase
{
    private const string Format = "dd.MM.yyyy HH:mm:ss";
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (value is string strValue && DateTime.TryParseExact(strValue, Format, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
        {
            return date;
        }
        return base.ConvertFrom(context, culture, value);
    }
}
  1. 在TimeModel的属性上标记转换器:
public class TimeModel
{
    [TypeConverter(typeof(CustomDateTimeConverter))]
    public DateTime RestartDuration { get; set; }
}
  1. 原有配置注册代码不需要改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:45:03