带转义反斜杠的日期字符串转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
相关产品推荐
相关产品推荐

