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

带转义反斜杠的日期字符串转DateTime失败,求清理方法

问题:JSON日期转DateTime因转义反斜杠失败

我有如下JSON数据:

[
   {
     "id": "2044020453",
     "startDate": "2022-11-19T04:14:11+07:00",
     "endDate": "2022-11-19T04:14:11+07:00"
  }
]

执行以下代码后:

string endDate = JsonConvert.SerializeObject(jo["endDate"], Formatting.None, new 
JsonSerializerSettings
{
   DateTimeZoneHandling = DateTimeZoneHandling.Utc
});

得到的endDate值为\"2022-11-18T21:14:11Z\"(实际包含转义反斜杠)。尝试用DateTime.ParseExact转换时始终失败:

DateTime endDateTime = DateTime.ParseExact(endDate, "yyyy-MM-ddTHH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture);

已试过endDate.Replace("\\", "")和Regex.Unescape(endDate),但都无效,请问该如何清理这些反斜杠?


解决方案

问题核心是你重复序列化了日期值:jo["endDate"]本身已是可直接转换的日期类型(或原始字符串),再次调用JsonConvert.SerializeObject会把它包装成带引号和转义的JSON字符串,导致后续解析失败。

优先推荐:直接解析原始值,避免重复序列化

如果jo是JObject,直接取出endDate并转换为DateTime,无需额外序列化:

// 自动处理时区,直接转换为DateTime
DateTime endDateTime = jo["endDate"].ToObject<DateTime>();

若需转为UTC时间,可在转换后调整:

DateTime endDateTime = jo["endDate"].ToObject<DateTime>().ToUniversalTime();

若必须处理已序列化的字符串(不推荐)

如果你确实拿到了带转义的字符串,需要同时移除转义反斜杠和首尾的双引号:

// 先清理转义符,再去掉首尾引号
string cleanedDate = endDate.Replace("\\", "").Trim('"');
DateTime endDateTime = DateTime.ParseExact(cleanedDate, "yyyy-MM-ddTHH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture);

或者直接用Json.NET反序列化这个字符串:

DateTime endDateTime = JsonConvert.DeserializeObject<DateTime>(endDate);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:30:54