In ASP.net-Webdienst, wenn die oben genannten nicht angegeben ist, was ist das Antwortformat standardmäßig? Auch, wenn mein Webdienst unten:
[WebMethod()]
public List<Sample> GenerateSamples(string[][] data)
{
ResultsFactory f = new ResultsFactory(data);
List<Sample> samples = f.GenerateSamples();
return samples;
}
Wenn ich das Antwortformat in JSON ändere, muss ich den Rückgabetyp in String ändern. Wie greife ich dann in meinem Javascript auf Objekte zu?
Derzeit rufe ich diesen Webdienst in meinem JS wie:
$.ajax({
type: "POST",
url: "http://localhost/TemplateWebService/Service.asmx/GenerateSamples",
data: jsonText,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(response) {
var samples = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
if (samples.length > 0) {
doSomethingHere(samples);
} else {
alert("No samples have been generated");
}
},
error: function(xhr, status, error) {
var msg = JSON.parse(xhr.responseText);
alert(msg.Message);
}
});
Was mir allerdings aufgefallen ist, obwohl alles einwandfrei funktioniert, wird die eval-Anweisung nie ausgeführt, was bedeutet, dass der Webdienst immer einen String zurückgibt!
Meine Frage ist also, ist [ScriptMethod(ResponseFormat = ResponseFormat.Json)] auf der Webdienstdefinitionsseite erforderlich?
Die Art, wie die Dinge jetzt sind, kann ich Proben Array verwenden und Zugriff auf jedes Objekt und seine Eigenschaften, wie ich normalerweise in jedem OOP-Code, die sehr bequem ist, und alles funktioniert kein Problem, aber ich wollte nur sicherstellen, dass ich nicht etwas in meinem Set-up fehlt.
Ich habe die Grundlagen der Kombination von Jquery's ajax mit asp.net von Encosia Seite, und die Antwort-Typ wurde nicht erwähnt, dort - ich las es auf einer anderen Website und bin ich nicht sicher, wie wichtig es ist.
http://www.codeproject.com/KB/webservices/JsonWebServiceJQuery.aspx
Listet 4 verschiedene Änderungen auf der Asp.net-Webdienstseite auf. Ich habe nur die ersten 2 - in meiner web.config. Der Dienst selbst und die Beispielklasse ist ohne Serialisierung implementiert, es hat jedoch Eigenschaften. Ich vermute, der Webdienst ist standardmäßig JSON? Und solange Ihre Objekte Eigenschaften haben, sind sie standardmäßig serialisierbar? Das war mein Verständnis, bis ich diesen Artikel gelesen habe.