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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:55:25