2011-09-25 81 views
3

所有,通過循環jQuery通過傳遞作爲數組對象,並使用C#的WebMethod獲取數據出來

我得到我的webmethod在我後面的代碼,但我有我的反序列化JSON數據的問題。 我沒有很好的參考,但這裏是我「米試圖做的。我在我的webmethod的代碼是不是讓我從我的Ajax調用了傳遞的數據。感謝您的幫助。

$("[id$=rdbSaveAjax1]").click(function() { 

    var mappedJobRole = new Array(); 

    $(".jobRole").each(function (index) { 

     var jobRoleIndex = index; 
     var jobRoleID = $(this).attr('id'); 
     var jobRoleName = $(this).text(); 

     // add all the roleids and rolenames to the job role array. 
     var roleInfo = { 
      "roleIndex": jobRoleIndex, 
      "roleID": jobRoleID, 
      "roleName": jobRoleName 
     }; 

     queryStr = { "roleInfo": roleInfo }; 
     mappedJobRole.push(queryStr); 

    }); 

    $.ajax({ 
     type: "POST", 
     url: "Apage.aspx/Save_Mapped_Role", 
     data: "{'savedRole': " + JSON.stringify(mappedJobRole) + "}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      alert("successfully posted data"); 
     }, 
     error: function (data) { 
      alert("failed posted data"); 
     } 

    }); 

}); 

在我後面的代碼我似乎無法獲取數據出來 我的等級:

public class MappedRole 
{ 

    public int Index { get; set; } 
    public string RoleID { get; set; } 
    public string RoleName { get; set; } 

} 

我的WebMethod:

[WebMethod] 
public static bool Save_Mapped_Role(object savedRole) 
{ 
    bool success = false; 
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    IList<MappedRole> role = new JavaScriptSerializer().Deserialize<IList<MappedRole>>savedRole); 
    int Index = role[0].Index; 
    string RoleID = role[0].RoleID; 
    string RoleName = role[0].RoleName; 

    return success; 

    } 
+0

什麼是您的請求和響應JSON的樣子,當你使用像螢火蟲或IE開發者工具等工具來? – dmck

+0

以及在後面的代碼中,我可以看到數據(webmethod),但只是不知道循環訪問數據的好方法。我在客戶端沒有收到任何錯誤,所以我沒有使用螢火蟲進行疑難排解。 – MdeVera

回答

0

此行似乎缺少一個openi NG parenthese

IList<MappedRole> role = new JavaScriptSerializer().Deserialize<IList<MappedRole>>savedRole); 

應改爲

IList<MappedRole> role = new JavaScriptSerializer().Deserialize<IList<MappedRole>>(savedRole); 

此外,爲了使用反序列化方法,您需要根據您所傳遞JSON變量來創建類。例如,基於您創建的JSON對象,您應該具有以下兩個類。

SavedRole類

public class SavedRole 
{ 
    public roleInfo[] { get; set; } 
} 

roleInfo類

public class roleInfo 
{ 
    public int roleIndex { get; set; } 
    public string roleID { get; set; } 
    public string roleName { get; set; } 
} 

現在Deserialze方法做它的魔力和填充物爲您服務。然後,您將能夠遍歷該對象並根據數據執行所需的操作。

[WebMethod] 
public static bool Save_Mapped_Role(object savedRole) 
{ 
    bool success = false; 
    var serializer = new JavaScriptSerializer(); 
    SavedRole role = serializer.Deserialize<SavedRole>(savedRole); 

    //Loop through the data like so 

    int roleIndex = 0; 
    string roleID = null; 
    string roleName = null; 

    foreach (var item in role.roleInfo) { 
     roleIndex = item.roleIndex; 
     roleID = item.roleID; 
     roleName = item.roleName; 

     //Do more logic with captured data 
    } 

    return success; 
} 

希望幫助

0

這篇文章解釋了你怎麼能一個JSON轉換爲C#:Parse JSON in C#

如果你不想使用,你需要做一些改變你的項目:

首先,得到您的RoleInfo,你需要改變它在一個字典,如:

(((object[])savedRole)[0] as Dictionary<string, object>)["roleInfo"] 

之後,你就可以manipule你的對象來創建列表:

var list = ((object[])savedRole); 

    IList<MappedRole> role = new List<MappedRole>(); 

    foreach (var item in list) 
    { 
     var dic = ((item as Dictionary<string, object>)["roleInfo"] as Dictionary<string, object>); 

     MappedRole map = new MappedRole() 
     { 
      roleIndex = Convert.ToInt32(dic["roleIndex"]), 
      roleID = dic["roleID"].ToString(), 
      roleName = dic["roleName"].ToString() 

     }; 

     role.Add(map); 
    } 
相關問題