如何将JavascriptSerializer序列化的日期时间字符串转换为Javascript日期对象

如何将JavascriptSerializer序列化的日期时间字符串转换为Javascript日期对象,javascript,asp.net,Javascript,Asp.net,在使用JavaScriptSerializer使用DateTime字段序列化对象之后,我看到DateTime字段如下所示: EffectiveFrom: "/Date(1355496152000)/" 如何将此字符串转换为Javascript日期对象?有一个答案可以帮助您: 如果要使用javascript将datetime字符串解析为datetime值,则必须使用如下“new Date”: var data = new Date("1355496152000"); 更新:此答案可能并不适用

在使用
JavaScriptSerializer
使用
DateTime
字段序列化对象之后,我看到
DateTime
字段如下所示:

EffectiveFrom: "/Date(1355496152000)/"

如何将此字符串转换为Javascript日期对象?

有一个答案可以帮助您:

如果要使用javascript将datetime字符串解析为datetime值,则必须使用如下“new Date”:

var data = new Date("1355496152000");

更新:此答案可能并不适用于所有情况。请参阅,以获得可能更好的优雅解决方案

您可以在.Net端“修复”来自
JavaScriptSerializer
的输出:

JavaScriptSerializer serializer = new JavaScriptSerializer();
var json = serializer.Serialize(this);
json = Regex.Replace(json,@"\""\\/Date\((-?\d+)\)\\/\""","new Date($1)");
return json;
这将改变

EffectiveFrom: "/Date(1355496152000)/"

Javascript可以直接使用它

编辑:更新以适应负面日期

编辑:下面是VB用户的正则表达式行:

json = Regex.Replace(json, """\\/Date\((-?\d+)\)\\/""", "new Date($1)")
更新2016.11.20:在javascript/json中有更多的datetime处理,我建议将正则表达式更改为

json = Regex.Replace(json,@"\""\\/Date\((-?\d+)\)\\/\""","$1");
结果值是有效的JSON,可以在javascript端转换为日期对象

还值得注意的是,moment.js()很好地处理了这种格式

moment("/Date(1198908717056-0700)/");

这有点像黑客,但上面的内容似乎不符合我想要实现的目标,因此在我序列化的对象定义中,我做了以下操作:

        /// <summary>Date of the record retention event or document date.
        /// </summary>
        public string DateOfRetentionEvent;
        [ScriptIgnore]
        public DateTime RetentionEventDate 
        {
            get
            {
                return _retentionEventDate;
            }
            set
            {
                _retentionEventDate = value;
                DateOfRetentionEvent = value.ToShortDateString();
            }
        }

这可能会帮助你复制好主意。为什么JavaScriptSerializer使用JavaScript无法使用的格式?原因有两个。首先,在创建JSON格式时,它们省略了日期文本。第二,虽然这是“可由javascript直接使用”的,但它只有在您必须使用eval()的情况下才可用,而eval()被认为是不好的,因为它可以用于跨站点脚本攻击。json=Regex.Replace(json,@“\”\ \ \/Date((?\d+)\/\”,“new Date($1)”;号码可能是negative@Kavius当我使用这种技术时,我无法让我的JSON通过验证。它应该通过吗?@Corgalore,正如Zach所指出的,这不是真正的“JSON”,而是有效的“Javascript”。它可能不会通过“JSON”验证。对于严格的JSON一致性,您可能会发现其他答案之一更合适。
moment("/Date(1198908717056-0700)/");
        /// <summary>Date of the record retention event or document date.
        /// </summary>
        public string DateOfRetentionEvent;
        [ScriptIgnore]
        public DateTime RetentionEventDate 
        {
            get
            {
                return _retentionEventDate;
            }
            set
            {
                _retentionEventDate = value;
                DateOfRetentionEvent = value.ToShortDateString();
            }
        }
{
    "DateToDispose": "1/1/2020",
    "DateOfRetentionEvent": "10/1/2014",
    "FullRetentionCode": "NR+5",
    "RetentionEvent": "NR",
    "RetentionPeriod": 5
}