C#中如何将JSON的\/Date(-62135596800000)\/转为dd-MM-yyyy日期
解决JSON序列化中RFEDates字段的日期格式问题
你遇到的\/Date(-62135596800000)\/是Microsoft原生JavaScriptSerializer默认的DateTime序列化格式,要输出dd-MM-yyyy规范格式的字符串,可采用以下几种方案:
方案1:直接将日期转为目标格式字符串(最简单)
确保Tobj.RFCDates为字符串类型,在赋值阶段就完成格式转换,避免序列化时自动生成特殊日期格式:
// 替换原有的RFCDates赋值逻辑 if (string.IsNullOrEmpty(ObjIp.RFCDATE)) { Tobj.RFCDates = DateTime.Now.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture); } else { // 兼容ObjIp.RFCDATE为字符串或DateTime类型的情况 DateTime rfcDate; if (DateTime.TryParse(ObjIp.RFCDATE, out rfcDate)) { Tobj.RFCDates = rfcDate.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture); } else { // 解析失败时设默认值,可根据业务调整 Tobj.RFCDates = DateTime.Now.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture); } }
这样Tobj.RFCDates本身就是dd-MM-yyyy格式的字符串,序列化后自然不会出现\/Date(...)\/格式。
方案2:自定义转换器全局控制DateTime序列化
如果需要统一处理所有DateTime类型的序列化格式,可自定义JavaScriptConverter:
public class CustomDateTimeConverter : JavaScriptConverter { private readonly string _targetDateFormat; public CustomDateTimeConverter(string dateFormat) { _targetDateFormat = dateFormat; } public override IEnumerable<Type> SupportedTypes { get { return new List<Type> { typeof(DateTime), typeof(DateTime?) }; } } public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) { // 按需实现反序列化逻辑,若不需要可简化返回null if (dictionary.TryGetValue("DateTime", out var dateValue) && DateTime.TryParse(dateValue.ToString(), out var date)) { return date; } return type == typeof(DateTime?) ? (DateTime?)null : DateTime.MinValue; } public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) { var result = new Dictionary<string, object>(); if (obj is DateTime dateTime) { result["DateTime"] = dateTime.ToString(_targetDateFormat, CultureInfo.InvariantCulture); } else if (obj is DateTime? nullableDate && nullableDate.HasValue) { result["DateTime"] = nullableDate.Value.ToString(_targetDateFormat, CultureInfo.InvariantCulture); } return result; } }
使用时注册转换器即可:
// 替换原序列化代码段 var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new List<JavaScriptConverter> { new CustomDateTimeConverter("dd-MM-yyyy") }); inputJsonIPColoMaster = serializer.Serialize(inputIPColoMaster);
方案3:改用Newtonsoft.Json(推荐)
JavaScriptSerializer功能有限,改用Newtonsoft.Json可更灵活配置日期格式:
// 替换原序列化代码段 var jsonSettings = new JsonSerializerSettings { DateFormatString = "dd-MM-yyyy", Culture = CultureInfo.InvariantCulture }; inputJsonIPColoMaster = JsonConvert.SerializeObject(inputIPColoMaster, jsonSettings);
若Tobj.RFCDates为DateTime类型,此配置会自动将其序列化为dd-MM-yyyy格式字符串;若为字符串类型则不受影响。
额外优化提示
你代码中存在重复的TowerType赋值逻辑,可删除重复部分以简化代码。
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

