[英]How to convert JavascriptSerializer serialized DateTime string to Javascript Date object
使用JavaScriptSerializer
使用DateTime
字段序列化對象后,我看到DateTime
字段如下所示:
EffectiveFrom: "/Date(1355496152000)/"
如何將此字符串轉換為Javascript Date對象?
更新 :這個答案在所有情況下可能都不合適。 請參閱JD的答案,以獲得更好的優雅解決方案。
您可以在.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)/"
至
EffectiveFrom: new Date(1355496152000)
這是Javascript直接消費的
編輯:更新以適應負面日期
編輯:這是VB人員的正則表達式行:
json = Regex.Replace(json, """\\/Date\((-?\d+)\)\\/""", "new Date($1)")
更新2016.11.20:在javascript / json中有更多日期時間處理在我身后,我建議將正則表達式更改為簡單的
json = Regex.Replace(json,@"\""\\/Date\((-?\d+)\)\\/\""","$1");
結果值是有效的JSON,並且可以在javascript端轉換為Date對象。
同樣值得注意的是,moment.js( http://momentjs.com/docs/#/parsing/ )足夠愉快地處理這種格式。
moment("/Date(1198908717056-0700)/");
有一個答案可以幫助你:
如果要使用javascript將datetime字符串解析為datetime值,則必須使用“new Date”,如下所示:
var data = new Date("1355496152000");
var obj = { EffectiveFrom: "/Date(1355496152000)/" };
//parse the Date value and replace the property value with Date object:
var dateValue = parseInt(obj.EffectiveFrom.replace(/\/Date\((\d+)\)\//g, "$1"));
obj.EffectiveFrom = new Date(dateValue);
這有點像黑客,但上面的內容似乎不太適合我想要實現的內容,所以在對象定義中我正在序列化,我這樣做了:
/// <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();
}
}
關鍵是,至少在我的用例中(反序列化永遠不會發生),JSON並不真正關心C#對日期值做了什么。 將[ScriptIgnore]
添加到DateTime值並為解析器提供替代視圖以進行輸出應該可以解決問題。 它在我的情況下:
{
"DateToDispose": "1/1/2020",
"DateOfRetentionEvent": "10/1/2014",
"FullRetentionCode": "NR+5",
"RetentionEvent": "NR",
"RetentionPeriod": 5
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.