2011-05-06 38 views
1

我正在通過AJAX(jQuery)調用WebMethod(ASP.NET)。如果我創建一個沒有參數的調用版本,它會調用罰款。當我將我的JSON傳遞給真正的方法時,它不會被調用(斷點沒有被擊中)。以下是我正在傳遞(陣列2個對象)的JSON的樣品:WebMethod沒有解僱--JSON問題?

{ 
    "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格式有問題嗎?我能想到的是,這阻止了我的電話通話。

+1

爲什麼加引號的數組值? – Oded 2011-05-06 20:04:33

+1

我確實認爲你必須將'bills'參數設置爲'string',並且必須對服務器上的字符串進行JSON反序列化。 – 2011-05-06 20:05:25

回答

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(); 
} 
+0

@bridus:請分享你的jQuery代碼:) – 2011-05-07 16:53:53

1

這是因爲它沒有找到您要發送它的簽名(LinkBillsToCandidate(串))

由於烏韋提到你可以給它一個字符串,並使用JSON反序列化方法反序列化在服務器端代碼: http://msdn.microsoft.com/en-us/library/bb412179.aspx

+1

在最近的一個項目中,我使用了.NET 4的新['dynamic'](http://msdn.microsoft.com/en-us/library/dd264736.aspx)關鍵字來幫助我避免創建一個真正的類到反序列化成。對於較小的物體,這應該是足夠的。 – 2011-05-06 20:33:06