64 votes

Comment laisser un fichier ASMX en sortie au format JSON

J'ai créé un fichier ASMX avec un code derrière le fichier. Cela fonctionne bien, mais il produit du XML.

Cependant, j'en ai besoin pour générer du JSON. La configuration de ResponseFormat ne semble pas fonctionner. Mon code-behind est:

 [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" };
    }
}
 

58voto

iCorrect Points 199

Pour recevoir une chaîne JSON pure sans l'envelopper dans un fichier XML, vous devez l'écrire directement dans le HttpResponse et modifier le type de retour WebMethod en void .

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

39voto

Pavel Chuchuva Points 12220

De WebService retourne XML, même lorsque ResponseFormat mis en JSON:

Assurez-vous que la requête est une requête POST, pas un GET. Scott Guthrie a un post expliquant pourquoi.

Si c'est écrit spécifiquement pour jQuery, cela peut aussi être utile pour vous:
http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

17voto

marc Points 1382

C'est probablement une vieille nouvelle à ce jour, mais la magie semble être:

  • Attribut [ScriptService] sur la classe de service Web
  • [ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] sur la méthode
  • Type de contenu: application / json dans la requête

Avec ces pièces en place, une demande GET est réussie

9voto

Bryan Rehbein Points 3947

Un rapide gotcha que j'ai appris à la dure (essentiellement des dépenses de 4 heures sur Google), vous pouvez utiliser PageMethods dans votre fichier ASPX retour JSON (avec le [ScriptMethod()] marqueur) pour une méthode statique, cependant si vous décidez de déplacer votre méthodes statiques pour un fichier asmx, il ne peut pas être une méthode statique.

Aussi, vous devez informer le service web Content-Type: application/json afin d'obtenir JSON de retour de l'appel (je suis en utilisant jQuery et les 3 Erreurs À Éviter Lors de l'Utilisation de jQuery article a été très éclairante - son à partir du même site web mentionné dans une autre réponse ici).

4voto

bitsprint Points 376

Appelez-vous le service Web à partir d'un script client ou côté serveur?

Vous trouverez peut-être utile d'envoyer un en-tête de type de contenu au serveur, par exemple:

'application / json; jeu de caractères = utf-8 '

Côté client, j'utilise un prototype de bibliothèque côté client et il existe un paramètre contentType lors d'un appel Ajax où vous pouvez le spécifier. Je pense que jQuery a une méthode getJSON.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X