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

JsonConvert序列化忽略DateTime Utc设置该如何修复?

问题根因

  1. 前端序列化时未强制输出带UTC标识的标准ISO日期格式,日期的时区属性丢失
  2. AJAX使用默认的application/x-www-form-urlencoded格式提交数据,MVC内置的表单值提供器解析日期时会默认转换为服务器本地时区,自动将Kind设置为Local
  3. 后端未统一配置日期反序列化的时区处理规则,导致Kind属性识别错误

修复步骤

1. 修正前端序列化配置

序列化时强制输出带Z后缀的UTC标准日期格式,明确标识时区:

var calendar = @Html.Raw(JsonConvert.SerializeObject(Model.Calendar, new JsonSerializerSettings
{
  DateTimeZoneHandling = DateTimeZoneHandling.Utc,
  DateFormatString = "yyyy-MM-ddTHH:mm:ssZ"
}));

2. 调整AJAX提交逻辑

改为JSON格式提交请求,避免表单编码解析时的时区转换问题:

$.ajax({
    url: '@Url.Action("UpdateCalendar")',
    // 将请求参数序列化为JSON字符串
    data: JSON.stringify({ 
        id: @Model.CalendarItem.ID, 
        newCalendar: calendar, 
        selectedMonth: $('.select-month').val() 
    }),
    // 指定请求体格式为JSON
    contentType: 'application/json; charset=utf-8',
    method: 'POST',
    beforeSend: function () {
        ShowLoading();
    },
    success: function (data) {
        // 业务逻辑
    },
    error: function (ex) {
        // 异常处理
    },
    complete: function () {
        // 收尾逻辑
    }
});

3. 调整后端接收逻辑

新增请求接收模型,用[FromBody]标识从JSON请求体绑定参数:

// 新增请求模型
public class UpdateCalendarRequest
{
    public long Id { get; set; }
    public List<List<CalendarDay>> NewCalendar { get; set; }
    public int SelectedMonth { get; set; }
}

// 调整Action签名
public PartialViewResult UpdateCalendar([FromBody] UpdateCalendarRequest request) {
     // 此时request.NewCalendar中的DateTime Kind已为Utc
}

4. 全局配置(可选,推荐)

在项目启动时统一配置Json.NET的日期处理规则,避免同类问题重复出现,ASP.NET MVC可在Global.asax的Application_Start方法中添加:

// 全局配置Json.NET序列化/反序列化都使用UTC时区
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};

// 配置MVC JSON值提供器的日期解析规则
JsonValueProviderFactory.Instance.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;

更稳妥的替代方案

直接将模型中所有DateTime类型替换为DateTimeOffset,该类型自带时区偏移属性,序列化/反序列化过程中不会丢失时区信息,也不存在Kind属性识别错误的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:48:02