2013-02-26 60 views
0

我很努力從WebMethod返回時正確處理對象。 條件(我之後的研究):WebMethod返回JSON對象問題

簡單的類來保存屬性:

public class memberLogin 
    { 
    public string Username {get; set;} 
    public string Password {get; set;} 
    } 

序列化方法:

 public static string JsonSerializer<T>(T t) 
     { 
      DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
      MemoryStream ms = new MemoryStream(); 
      ser.WriteObject(ms, t); 
      string jsonString = Encoding.UTF8.GetString(ms.ToArray()); 
      ms.Close(); 
      return jsonString; 
     } 

(簡化清晰)WEBMETHOD

[WebMethod(EnableSession = true)] 
    public static string getCredentials() 
     { 
      memberLogin ml = new memberLogin(); 
      ml.Username = "user"; 
      ml.Password = "pass"; 
      string json = JsonHelper.JsonSerializer<memberLogin>(ml); 
      return json; 
     } 
     return null; 
    } 

和JavaScript

$("#element").live("click", function (e) { 

$.ajax({ 
    type: "POST", 
    url: "Default.aspx/getCredentials", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: false, 
    cache: false, 
    success: post_to_url 
}); 
}); 
function post_to_url(params) { 
method = "post"; 
path = "http://example"; 

var form = document.createElement("form"); 
form.setAttribute("method", method); 
form.setAttribute("action", path); 

for(var key in params) { 
    if(params.hasOwnProperty(key)) { 
     var hiddenField = document.createElement("input"); 
     hiddenField.setAttribute("type", "hidden"); 
     hiddenField.setAttribute("name", key); 
     hiddenField.setAttribute("value", params[key]); 

     form.appendChild(hiddenField); 
    } 
} 
document.body.appendChild(form); 
form.submit(); 
} 

調試時,返回的WebMethod所以"{\"Password\":\"pass\",\"Username\":\"user\"}"這似乎是什麼,我希望它是(鍵,值PAR),除了\但是這是它是如何序列。 但是,當使用Ajax檢索時,我無法從中獲取任何值。 alert(params)給出object Object,調用params.Username給出undefined。有什麼我失蹤?某種類型的演員? 我認爲如果對象是序列化的,那麼就沒有這種需要。 對不起,很長的文章,但我儘量提供儘可能多的信息。

+1

,我的靈魂死了一點點 – 2013-02-26 18:28:49

回答

4

您必須將JSON字符串解析爲JSON對象。 在Javascript中:

var user = JSON.parse(params.responseText); 
var username = user.Username; 
var password = user.Password; 
我每次看.NET代碼
+0

我已經嘗試過了使用參數,沒有工作。但是,當解析'var itemx =「{\」Password \「:\」pass \「,\」Username \「:\」user \「}」'它確實有效。我認爲這可能是我的阿賈克斯電話.. – Savio 2013-02-26 18:53:40

+0

對不起,我編輯了我的答案 – 2013-02-26 18:55:27

+0

對於其他人:小心什麼是通過!我沒有注意到我的數組在「d」鍵內,2個JSON.parse()調用允許我將數組取出併成功使用它。謝謝! – Savio 2013-02-26 20:39:04