2016-03-29 3 views
0

Als Titel definiert,Keine parameterlosen Konstruktor, wenn POST-Anforderung in JSON Content Type mit ASMX Web Service

Wenn ich Fiddler verwenden, um die Seite zu testen -

http://localhost:59583/JSONtest.asmx/Test Content-Type: application/json; charset = utf-8

und meine Anfrage Körper ist

{"header":{"sig":"abcdefg","timestamp":"2016-03-25T04:25:09.8395853Z"}} 

Es Reaktion auf diese Fehlermeldung zurück: Nein für Typ definiert parameterlosen Konstruktor von \ u0027System.String \ u0027

Aber wenn ich das JSON-Format mit umgekehrten Schrägstrichen anlege:

{"header":"{\"sig\":\"abcdefg\",\"timestamp\":\"2016-03-25T04:25:09.8395853Z\"}"} 

Die Antwort zeigt das Ergebnis I wa nt was ist richtig.

Wie füge ich ohne Backslashes JSON Format ein?

Dies ist mein Asmx-Code.

[WebMethod] 
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] 
    public string Test(string header) 
    { 
     return header; 
    } 

Antwort

0

Das liegt daran, dass "header" in Ihrem ersten Schnipsel eine Klasse mit Eigenschaften ist, kein einziges string wie in Ihrem Code. Die Fehlermeldung ist meiner Meinung nach nur verwirrend. Das zweite Snippet hat nur einen string als Wert für "header", also wäre das in Ordnung. Wenn Sie wirklich wollen, dass "header" ein Objekt ist, müssen Sie eine separate Klasse dafür erstellen, damit es richtig serialisiert wird.

+0

Können Sie mir ein Beispiel geben? nicht sehr verständlich – user3901625

+0

Ihre erste 'Kopfzeile' ist keine Zeichenfolge, daher können Sie sie nicht als solche serialisieren. Der andere ist, da es richtig entkommen ist. –

+0

Lassen Sie uns sagen, ich muss 2 Parameter mit vielen Array-Wert innerhalb einfügen: 'string header' und' string body' dann muss ich den Wert für die Überschrift '{" sig ":" eeewrewre "," timestamp "einfügen: "2014-01-01T10: 11: 12Z"} ' und für Körper ' { "payerbanknum": "34434", "payerbankname": "Testbank" '} Wie die Anfrage Körper in Fiedler geben? – user3901625

0

vor dem Ajax Post-Anforderung zu senden können Sie wickeln sowohl Header-Objekt und es ist Wert innerhalb JSON.stringify()

var myHeader = {"header":JSON.stringify(headerValue)}; 
var myParams = JSON.stringify(myHeader); 

dann können Sie die myParams Variable als Datenparameter in die Ajax-Anforderung senden

$.ajax('url',data:myParams .....