2011-09-25 37 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); 
    } 
相关问题