簡體   English   中英

如何將JavascriptSerializer序列化DateTime字符串轉換為Javascript Date對象

[英]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到C#解析日期和時間

如果要使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM