json2.js和wcf傳遞Date對象問題

來源:互聯網
上載者:User

在使用jquery和wcf通訊的時候,遇到了通過json傳遞Date對象的問題.通過觀察發現wcf返回到瀏覽器中的json字串 是 "\/Date(1231231323+0800)\/" 形式。前面的數字1231231323是GMT 時區中自1970 年1 月1 日午夜以來按正常時間(非夏令時)經過的毫秒數.

 

所以可以取出該數字得到Date對象

var dateStr =  "\/Date(1231231323+0800)\/";

var date =new Date(parseInt( dataStr.substring(6,dataStr.length-2) ));

當然要想把用戶端的Date對象通過json字串傳遞給wcf也必須把Date對象格式化成 "\/Date(1231231323+0800)\/"形式的字串

var date =new Date();
var dateStr = "\/Date("+date.getTime()+"+0800)\/"

 

 我使用的json2.js中的JSON.stringify和JSON.parse來完成js對象和json字串之間轉換的。但是這兩個方法預設的轉換是按照ISO strings形式轉換的

查看json2.js可以發現下面程式碼片段

        Date.prototype.toJSON = function (key) {

            return this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z';
        };

 所以大家如果只需要個wcf通訊的話可以把這個方法修改下返回wcf形式的字串,這樣直接調用JSON.stringify(data)

就ok了,不用再特別處理時間對象了。

 

        Date.prototype.toJSON = function(key) {
            return "\/Date(" + this.getTime() + "+0800)\/";
        };

 

 現在看下如何讓JSON.parse方法也自動處理好伺服器端返回的json時間字串,我們知道JSON.parse方法第二個參數是一個回呼函數,可以用來遍曆處理wcf返回json對象的屬性。所以我們可以這樣來解析wcf返回的json字串

JSON.parse(data,function(key, value) {
        if (typeof value == "string" && value.indexOf("\/Date(") == 0) {
            var s = value.substring(6, value.length - 2);
            return new Date(parseInt(s));
        }
            return value;
    })

 這裡判斷value是時間的字串不是很嚴格,大家可以自己修改下。

但是這樣每次調用都傳入該函數也挺煩人的,反正我只和wcf通訊,於是也可以修改json2.js

找到下面的程式碼片段

      JSON.parse = function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

            var j;

            
}

 

 然後再parse方法的前面加上下面代碼

 

  JSON.parse = function(text, reviver) {
            // 修改×××××××××××××××××××××××××××
            if (reviver == undefined) {
                reviver = function(key, value) {
                    if (typeof value == "string" && value.indexOf("\/Date(") == 0) {
                        var s = value.substring(6, value.length - 2);
                        return new Date(parseInt(s));
                    }
                    return value;
                }
            }  // 修改×××××××××××××××××××××××××××


            // The parse method takes a text and an optional reviver function, and returns
            // a JavaScript value if the text is a valid JSON text.

            var j;

}

這樣當我們就不需要每次傳入
第二個參數reviver 回呼函數了。

我修改過的json2.js檔案 http://files.cnblogs.com/xhan/json2Xhan.js

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.