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

C#中MM/dd/yyyy HH:mm:ss格式DateTime的JSON反序列化问题

解决JSON中MM/dd/yyyy HH:mm:ss格式日期反序列化为C# DateTime类型的问题

问题场景

JSON数据中日期字段采用MM/dd/yyyy HH:mm:ss格式,直接反序列化为带DateTime类型字段的C#类时失败,仅当该字段改为string类型时反序列化正常,需保留DateTime类型的解决方案。

解决方案

根据使用的JSON序列化库不同,提供对应配置方式:

1. 使用Newtonsoft.Json(Json.NET)

方式一:全局指定日期格式

反序列化时配置日期格式规则:

var settings = new JsonSerializerSettings
{
    DateFormatString = "MM/dd/yyyy HH:mm:ss",
    Culture = CultureInfo.InvariantCulture
};

var result = JsonConvert.DeserializeObject<List<YourClass>>(jsonString, settings);

方式二:字段级特性标注

直接在date字段上添加特性指定格式:

public class YourClass
{
    public int id { get; set; }
    public string name { get; set; }
    
    [JsonConverter(typeof(IsoDateTimeConverter), "MM/dd/yyyy HH:mm:ss")]
    public DateTime date { get; set; }
}

之后直接执行反序列化:

var result = JsonConvert.DeserializeObject<List<YourClass>>(jsonString);

2. 使用System.Text.Json(.NET Core/.NET 5+默认库)

方式一:全局配置转换器

自定义日期转换器并添加到序列化选项:

// 自定义日期转换器
public class DateTimeConverterUsingDateFormat : JsonConverter<DateTime>
{
    private readonly string _dateFormat;

    public DateTimeConverterUsingDateFormat(string dateFormat)
    {
        _dateFormat = dateFormat;
    }

    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        return DateTime.ParseExact(reader.GetString(), _dateFormat, CultureInfo.InvariantCulture);
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString(_dateFormat, CultureInfo.InvariantCulture));
    }
}

// 反序列化时配置
var options = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true, // 兼容JSON小写字段名
    Converters = {
        new DateTimeConverterUsingDateFormat("MM/dd/yyyy HH:mm:ss")
    }
};

var result = JsonSerializer.Deserialize<List<YourClass>>(jsonString, options);

方式二:字段级特性标注

直接在date字段上绑定转换器:

public class YourClass
{
    public int id { get; set; }
    public string name { get; set; }
    
    [JsonConverter(typeof(DateTimeConverterUsingDateFormat), "MM/dd/yyyy HH:mm:ss")]
    public DateTime date { get; set; }
}

此时无需额外配置选项,直接调用反序列化即可。

注意事项

  • 必须使用CultureInfo.InvariantCulture,避免系统区域差异导致解析失败
  • 若JSON字段名与C#属性名大小写不一致,System.Text.Json需开启PropertyNameCaseInsensitive,Newtonsoft.Json默认支持大小写不匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:40:20