循环通过JQUERY作为数组传入的对象,并使用c#webmethod获取数据

本文关键字:对象 数据 获取 c#webmethod JQUERY 数组 循环 | 更新日期: 2023-09-27 18:09:53

all,

我在代码背后使用了我的web方法,但在反序列化json数据时遇到了问题。我没有很好的参考资料,但这是我正在努力做的。我的web方法中的代码不允许我从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]
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;
  }

循环通过JQUERY作为数组传入的对象,并使用c#webmethod获取数据

此行似乎缺少一个开头的括号

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

应读取

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

此外,为了使用Deserialize方法,您需要根据传递的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; }
}

现在Desialze方法将发挥其魔力,为您填充对象。然后,您将能够循环遍历对象,并对数据执行所需的操作。

[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; 
}

希望对有所帮助

这篇文章解释了如何将JSON转换为C#:在C#中解析JSON

如果你不想使用它,你需要在你的项目中做一些改变:

首先,要获得您的RoleInfo,您需要在字典中对其进行转换,如:

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

之后,你可以操纵你的对象来创建你的列表:

    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);
    }