ASP.NET service web à tort retourne XML au lieu de JSON
Je suis d'essayer d'utiliser un service web ASMX à partir de javascript à l'aide de jQuery. Il fonctionne très bien lorsque je demande pour le XML, mais je tiens à faire usage de .net la sérialisation JSON fonctionnalité; (on commence aussi à me gonfler que ce n'est pas de travail)
Le code du service web:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
[WebService()]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class SimpleService : WebService
{
[WebMethod]
public String GetString()
{
return "value";
}
}
Le code pour le client:
$.ajax({
type: "POST",
url: "SimpleService.asmx/GetString",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json"
});
Et la réponse...
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
<?xml version="1.0" encoding="utf-8"?><string xmlns="http://tempuri.org/">value</string>
La demande réussit toujours, mais jQuery me donne une erreur de l'analyseur (il n'est pas surprenant, compte tenu de la réponse).
Je suis à bout de ressources. J'ai essayé d'ajouter un ServiceMethod attribut avec le ResponseType mis en JSON, mais rien ne semble fonctionner.
Je ne veux pas utiliser le .NET ScriptManager javascript générateur soit, merci donc de ne pas suggérer de les utiliser.
OriginalL'auteur Evan Larkin | 2011-01-30
Vous devez vous connecter pour publier un commentaire.
Pas de réponse sur DONC m'a aidé à résoudre ce problème. Au lieu de cela, j'ai trouvé 2 articles décrivant ce problème.
jQuery ne pas encoder les données de la demande en JSON, mais dans une chaîne de requête. Cela provoque ASP.NET pour ignorer la
Accept
en-tête et de répondre avec XML.Vérifier cet article le titre "JSON, les objets, et les chaînes de caractères: oh mon dieu!".
Ici, je cite:
Dans mon cas, le paramètre de données est un gros objet donc j'utilise quelque chose comme ça pour sérialiser JSON à la main.
Arriver ASP.NET ScriptService de retour JSON lors de l'interrogation à partir de jQuery est très délicat et beaucoup de paramètres dans votre code peut le faire jeter XML au lieu de JSON. Vous devriez lire divers AFIN de Q/r pour vous faire satisfait.
Liés à la forme de l'article du même auteur qui peut donner plus de conseils.
OriginalL'auteur SandRock
C'est un erreur de l'utilisateur.
Je viens de tombé sur cette autre stackoverflow question: web-service retour xml au lieu de json net 4-0
Une solution similaire s'est avéré être ce dont j'avais besoin. Le web.fichier de config a un httpHandler la cartographie pour la ScriptHandlerFactory pour IIS6, et j'ai été en utilisant IIS7. L'ajout de la httpHandler cartographie de la IIS7 section du site web.config résolu le problème.
Je déteste caché des pièces en mouvement....
OriginalL'auteur Evan Larkin
Essayez d'ajouter le
[ScriptMethod]
attribut de la méthode:Il Est Intéressant De Noter, "ResponseFormat.Json" est la valeur par défaut: msdn.microsoft.com/en-us/library/...
OriginalL'auteur Darin Dimitrov