如何将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
}