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

Angular+MVC项目服务器端JSON日期字符串反序列化与转换问题

解决Angular与MVC混合项目中日期字符串转DateTime的问题

嘿,我来帮你搞定这个头疼的日期转换问题!咱们一步步拆解:

问题根源:多余的双引号

你用JSON.stringify把日期字符串传给服务器,导致后端收到的是带双引号的字符串(比如\"05/10/2018\"),这直接导致DateTime.Parse失败——因为它没法识别带引号的日期格式。


方案1:从源头解决(推荐)

客户端根本不需要用JSON.stringify来传递日期字符串!直接传原始的日期字符串就行,这样后端收到的就是干净的05/10/2018:

修改客户端服务类代码:

private GetLOBUrl = 'http://localhost:63213/Vto/GetLOB'; 
getLOBs(action: string = null, data?: VTO): Observable<VTO[]> { 
  // 去掉JSON.stringify,直接传action(日期字符串)
  return this.http.post<VTO[]>(this.GetLOBUrl + `/?ReportDate=${action}`,null) 
    .catch(this.errorHandler); 
} 
errorHandler(error: HttpErrorResponse) { 
  return Observable.throw(error.message || "Server Error"); 
} 

方案2:后端处理带引号的字符串(如果必须保留JSON.stringify)

如果因为业务场景限制,客户端必须用JSON.stringify,那后端第一步要先剥离前后的双引号,再做日期转换:

public static IEnumerable<DTO.DropDownItem> SelectLOB(string reportDate) { 
  // 第一步:去掉前后的双引号
  reportDate = reportDate.Trim('"');

  // 第二步:安全转换日期(推荐用ParseExact避免格式歧义)
  // 注意:这里要明确你的日期格式是MM/dd/yyyy还是dd/MM/yyyy,别搞混!
  DateTime rDate;
  if (!DateTime.TryParseExact(reportDate, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out rDate))
  {
      // 转换失败时的处理逻辑,比如抛异常或返回空列表
      throw new ArgumentException("日期格式错误,请传入MM/dd/yyyy格式的字符串");
  }

  string query = @"SELECT Id, Description FROM TABLE WHERE StartDate = @reportDate AND StopDate is NULL"; 
  IEnumerable<DTO.DropDownItem> items = new List<DTO.DropDownItem>(0); 
  var p = new DynamicParameters(); 
  // 注意:这里要传转换后的DateTime类型rDate,不是原始字符串!
  p.Add("@reportDate", rDate); 

  using (SqlConnection con = Connection.GetConnection()) { 
    items = con.Query<DTO.DropDownItem>(query, param: p, commandType: CommandType.Text); 
  } 
  return items; 
} 

关于NuGet包的疑问

你当前用的DynamicParameters和Query方法应该来自Dapper,既然代码能正常编译运行,说明你已经安装了Dapper的NuGet包,不需要额外安装其他包来处理日期转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:32:36