it-swarm.com.de

So lassen Sie eine ASMX-Datei JSON ausgeben

Ich habe eine ASMX-Datei mit einem Code hinter der Datei erstellt. Es funktioniert gut, gibt aber XML aus.

Ich brauche es jedoch, um JSON auszugeben. Die ResponseFormat-Konfiguration scheint nicht zu funktionieren. Mein Code-Behind ist:

[System.Web.Script.Services.ScriptService]
public class _default : System.Web.Services.WebService {
    [WebMethod]
    [ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]
    public string[] UserDetails()
    {
        return new string[] { "abc", "def" };
    }
}
62
doekman

Von WebService gibt XML zurück, auch wenn ResponseFormat auf JSON gesetzt ist :

Stellen Sie sicher, dass es sich bei der Anfrage um eine POST) - Anfrage handelt, nicht um eine GET-Anfrage. Scott Guthrie hat einen -Post, in dem erläutert wird, warum .

Obwohl es speziell für jQuery geschrieben wurde, kann dies auch für Sie nützlich sein:
Verwenden von jQuery zum Verwenden von ASP.NET JSON-Webdiensten

39
Pavel Chuchuva

Um eine reine JSON-Zeichenfolge zu erhalten, ohne dass sie in XML eingebunden wird, müssen Sie die JSON-Zeichenfolge direkt in HttpResponse schreiben und den Rückgabetyp WebMethod in void ändern.

    [System.Web.Script.Services.ScriptService]
    public class WebServiceClass : System.Web.Services.WebService {
        [WebMethod]
        public void WebMethodName()
        {
            HttpContext.Current.Response.Write("{property: value}");
        }
    }
53
iCorrect

Dies ist wahrscheinlich eine alte Nachricht, aber die Magie scheint zu sein:

  • Attribut [ScriptService] für die Webdienstklasse
  • [ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] in der Methode
  • Inhaltstyp: application/json auf Anfrage

Mit diesen Teilen ist eine GET-Anforderung erfolgreich.

Für einen HTTP POST

  • [ScriptMethod (UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] in der Methode

und auf der Clientseite (unter der Annahme, dass Ihre Webmethode Methodenname heißt und einen einzelnen Parameter namens searchString verwendet):

        $.ajax({
            url: "MyWebService.asmx/MethodName",
            type: "POST",
            contentType: "application/json",
            data: JSON.stringify({ searchString: q }),
            success: function (response) {                  
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(textStatus + ": " + jqXHR.responseText);
            }
        });
15
marc

Eine kurze Zusammenfassung, die ich auf die harte Tour gelernt habe (im Grunde genommen verbringe ich 4 Stunden mit Google). Sie können PageMethods in Ihrer ASPX-Datei verwenden, um JSON (mit dem [ScriptMethod ()] - Marker) für eine statische Methode zurückzugeben, wenn Sie sich jedoch für einen Umzug entscheiden Wenn Sie statische Methoden für eine ASMX-Datei verwenden, kann dies keine statische Methode sein.

Außerdem müssen Sie dem Webdienst Content-Type mitteilen: application/json, um JSON vom Aufruf zurückzubekommen (ich verwende jQuery und der Artikel Fehler, die bei der Verwendung von jQuery zu vermeiden sind war sehr aufschlussreich - es ist von der gleichen Website, die in einer anderen Antwort hier erwähnt wurde).

9
Bryan Rehbein

Rufen Sie den Webdienst vom Client-Skript oder vom Server aus auf?

Es kann hilfreich sein, einen Inhaltstyp-Header an den Server zu senden, z.

'application/json; Zeichensatz = utf-8 '

Auf der Clientseite verwende ich eine clientseitige Prototypbibliothek, und beim Ausführen eines Ajax-Aufrufs gibt es einen contentType-Parameter, in dem Sie dies angeben können. Ich denke, jQuery hat eine getJSON-Methode.

4
bitsprint

Alternative: Verwenden Sie einen generischen HTTP-Handler (.ashx) und Ihre bevorzugte JSON-Bibliothek, um JSON manuell zu serialisieren und zu deserialisieren.

Ich habe festgestellt, dass die vollständige Kontrolle über die Bearbeitung einer Anfrage und das Generieren einer Antwort alles andere übertrifft, was .NET für einfache, REST-fähige Webdienste bietet.

3
Kevin