2016-07-04 5 views
0

Ich habe ein Skript, das ein Datenarray in JSON wie folgt zurückgibt.POST JSON-Array zu ASP.NET WebMethod

[ 
    {"ItemID":"10319","ItemCode":"ITEM-010318","Qty":"1","custRef":"12 - Mitsubishi Fighter FK61F"}, 
    {"ItemID":"10933","ItemCode":"ITEM-010932","Qty":"1","custRef":"12 - Mitsubishi Fighter FK61F"},{"ItemID":"10537","ItemCode":"ITEM-010536","Qty":"1","custRef":"12 - Mitsubishi Fighter FK61F"}, 
    {"ItemID":"14863","ItemCode":"ITEM-014862","Qty":"1","custRef":"12 - Mitsubishi Fighter FK61F"}, 
    {"ItemID":"14864","ItemCode":"ITEM-014863","Qty":"1","custRef":"12 - Mitsubishi Fighter FK61F"} 
] 

Diese Daten in einer Variablen cartData

ich dann drücken Sie die Daten auf meine WebMethod über AJAX,

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "OrderFormServices.asmx/AddItemsToCart", 
    data: JSON.stringify(cartData), 
    dataType: "json" 

}); 

Meine Web-Methode sieht wie folgt aus

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public void AddItemsToCart(string [] itemID, string [] itemCode, string [] Qty, string [] custRef) 
genannt wie folgt gespeichert

Wenn ich jedoch versuche und die Daten POST, bekomme ich einen Fehler auf der Konsole was ich weder Kopf noch Schwanz machen kann! Kann jemand etwas Licht darauf werfen?

Type 'System.Collections.Generic.IDictionary`2[[System.String, mscorlib, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089], 
[System.Object, mscorlib, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 
is not supported for deserialization of an array. 

Antwort

1

Die Methode erwartet für jedes Feld ein Array. So , entweder Sie Methode zu ändern, etwas zu sein wie:

public void AddItemsToCart(CartItem[] items) 

Wo CartItem ist die Klasse mit allen diesen Bereichen.

OR

Bearbeiten Sie die js passieren, wie die Web-Methode erwartet wie:

var data = { 
itemID : [], 
itemCode:[], 
Qty:[], 
custRef:[]}; 
//here fill all array with each one of the items in the json array. 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "OrderFormServices.asmx/AddItemsToCart", 
    data: JSON.stringify(data), 
    dataType: "json" 

}); 
+0

Danke, habe ich nach Ihrem zweiten Vorschlag bearbeitet und ich bin jetzt mit 'cartData.push ({ 'Itemid': itemIdVal, 'itemCode': itemCodeVal, 'Menge': qtyVal, 'custRef': custRefVal }); 'jedoch nicht zu funktionieren scheint - cartData.push ist keine Funktion ? –

+0

nein das würde nicht funktionieren, es wird so funktionieren: cartData.push ({'itemID': [itemIdVal], 'itemCode': [itemCodeVal], 'Menge': [qtyVal], 'custRef': [custRefVal]}); Stellen Sie außerdem sicher, dass die Parameternamen derselbe Fall wie die Webmethode sind, z. B .: Menge. – MoustafaS

+0

Ich bekomme 'cartData.push' ist keine Funktion? –