8
votes

ASP.NET WebMethod retourne JSON enveloppé dans des citations

J'ai une page ASP.NET avec une webmethod dessus pour réussir Json à mon JavaScript.

ci-dessous est la méthode Web: p> xxx pré>

Lorsque cela est renvoyé au client, il est formaté comme suit: P>

{ \"d\": \"{ \"firstname\": \"John\", \"lastname\": \"Smith\" }\" }


0 commentaires

3 Réponses :


9
votes

Je suppose que vous souhaitez renvoyer la représentation JSON de l'objet xxx

mais votre signature de méthode renvoie une chaîne. La sérialisation ASP.NET Framework est correctement sérialisation de la chaîne réponse . Mettre un autre moyen, si votre fonction était xxx

vous ne seriez pas surprise si la sortie était xxx

Il arrive tout simplement Cette réponse a des citations doubles qui doivent être échappées.

Vous voulez évidemment simplement obtenir à l'objet. Vous avez 2 options: -

1) Utilisez eval dans votre JavaScript pour activer la chaîne en un objet par objet. xxx

2) ou (et ceci est ma solution préférée) Demandez à votre méthode renvoient un objet réel et laissez la série JSON du cadre faire le levage lourd pour vous xxx

Vous verrez que cela génère la réponse que vous attendez probablement à l'origine (par exemple, {"D": {"DernierName": "John", "Nom": "Smith"}}


3 commentaires

Ps. Si vous souhaitez conserver votre fonction renvoyer une chaîne contenant le JSON, je suggère d'utiliser quelque chose comme la fonction d'extension TOJSON de Risk Strahl [ west-wind.com/weblog/posts/442969.aspx] . Votre corps de méthode peut alors être nouveau {prénom = "John"}. Tojson ().


Merci pour votre réponse, c'est très intéressant. Je n'ai pas réalisé que vous pouviez créer des objets de cette façon en C #. Cependant, j'ai déjà créé un cadre pour la construction de chaînes JSON à partir d'objets afin d'utiliser l'option côté client. Je vais examiner l'option côté serveur dans les projets futurs. Merci.


@CHRisFewTrell - Merci beaucoup. Je retourne une chaîne pendant près de 2 ans maintenant. Ce post / réponse doit être évalué beaucoup plus élevé



3
votes

En fait, toute cette question existe parce que vous essayez de sortir-penser des services Web ASP.NET. Vous devez configurer une classe pour que vos données soient renvoyées et utilisez cette classe (ou la liste (de votreclass)) pour les résultats de la queue et de les renvoyer.

Un excellent article expliquant tout cela (un piège très courant) est: http://encia.com/asp-net-web-services-mistake-manual-json-serialization/


0 commentaires

-1
votes

J'ai eu un problème similaire avec mon code. J'essayais de renvoyer un xmldocument comme JSON à un script d'appel, mais le retour de XMLDocument de Webservice a renvoyé un ensemble de tableaux vides (comme xmldocument n'est pas sérialisable!).

Si je réglais le scriptservice avec l'attribut ResponseFormat.json, mon JSON a été double-échappé.

Le chemin de l'Out-Fox ASP.NET est de dire ASP.NET que vous retournez XML et puis il ne double pas échapper à votre Json; -) xxx

Je sais que c'est un hack mais .....


0 commentaires