循环通过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;
}
此行似乎缺少一个开头的括号
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);
}