我通过AJAX(jQuery)调用WebMethod(ASP.NET)。如果我创建一个没有参数的调用版本,它会调用很好。当我将JSON传递给真正的方法时,它不会被调用(断点没有被击中)。这是我传入的JSON示例(包含2个对象的数组):
{
"bills":[
"{ 'Id': '1', 'Vote': 'true' },{ 'Id': '2', 'Vote': 'false' }"
]
}
这是WebMethod签名:
[WebMethod]
public static void LinkBillsToCandidate(List<JsonBillForCandidate> bills)
这是.NET对象:
public class JsonBillForCandidate
{
public int Id { get; set; }
public bool? Vote { get; set; }
}
我的JSON格式有问题吗?我能想到的就是阻止我的电话通过。
答案 0 :(得分:1)
这是因为它没有找到你发送的签名(LinkBillsToCandidate(string))
正如Uwe所提到的,您可以使用JSON反序列化方法向服务器端代码发送一个字符串并对其进行反序列化: http://msdn.microsoft.com/en-us/library/bb412179.aspx
答案 1 :(得分:0)
问题是我怀疑的。稍微调整一下JSON就可以了。以下是最终的JSON格式:
{
'bills':[
{
'Id':3,
'Vote':true
},
{
'Id':4,
'Vote':false
}
]
}
这个ASP.NET方法处理JSON就好了:
[WebMethod]
public static void LinkBillsToCandidate(List<JsonBillForCandidate> bills)
{
foreach (JsonBillForCandidate bill in bills)
{
BillLogic.LinkBillToCandidate(bill.Id, SessionHelper.CandidateId, bill.Vote);
}
NavigationHelper.GoToCandidate();
}