À l'aide de JSON.NET comme la valeur par défaut JSON sérialiseur ASP.NET MVC 3 - est-il possible?
Est-il possible d'utiliser JSON.NET en tant que par défaut sérialiseur JSON en ASP.NET MVC 3?
Selon mes recherches, il semble que la seule façon d'y parvenir est de étendre ActionResult comme JsonResult dans MVC3 n'est pas du virtuel...
J'espère qu'avec l'ASP.NET MVC 3 qu'il y aurait un moyen de spécifier un fournisseur enfichable pour la sérialisation JSON.
Pensées?
- connexes: stackoverflow.com/questions/6883204/...
Vous devez vous connecter pour publier un commentaire.
Je crois que la meilleure façon de le faire, est - comme décrit dans vos liens à étendre ActionResult ou de prolonger JsonResult directement.
Comme pour la méthode JsonResult qui n'est pas du virtuel sur le contrôleur qui n'est pas vrai, il suffit de choisir le droit de surcharge. Cela fonctionne bien:
EDIT 1: UN JsonResult extension...
EDIT 2: j'ai enlevé la vérification de Données null comme valeur par les suggestions ci-dessous. Que devraient faire les nouvelles versions de JQuery heureux et semble comme la sane chose à faire, comme la réponse peut ensuite être inconditionnellement désérialisé. Sachez cependant, que ce n'est pas le comportement par défaut pour les réponses JSON à partir de ASP.NET MVC, qui répond plutôt à une chaîne vide, quand il n'y a pas de données.
if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) throw new InvalidOperationException(MvcResources.JsonRequest_GetNotAllowed);
? Je pense qu'il faut ajouter à cette vérification dans la réponse(sansMvcResources.JsonRequest_GetNotAllowed
mais avec quelques message personnalisé) Également, que sur les 2 autres par défaut asp.net mvc chèques - MaxJsonLength et RecursionLimit? Ne nous en avons besoin si nous utilisons json.net?J'ai mis en place sans la nécessité d'un contrôleur de base ou de l'injection.
J'ai utilisé de l'action des filtres à remplacer le JsonResult avec un JsonNetResult.
Dans le monde.asax.cs Application_Start (), vous devrez ajouter:
Pour l'achèvement de souci, voici mon JsonNetResult de l'extension de la classe que j'ai ramassé par ailleurs et que j'ai modifié légèrement pour obtenir de bons à la vapeur de soutien:
return Json()
en effet utilise Json.Net.JsonResult
deJson()
et la convertit en unJsonNetResult
. Il le fait à l'aide de laas
mot-clé qui retourne null si la conversion n'est pas possible. Très astucieux. 10 points pour Gryffondor![BetterJsonHandler]
: -).Utilisation Newtonsoft JSON converter:
Je sais que c'est bien après que la question a été posée, mais je suis en utilisant une approche différente, je suis à l'aide de l'injection de dépendance pour instancier mon contrôleurs.
J'ai remplacé le IActionInvoker ( en injectant du contrôleur ControllerActionInvoker Propriété ) avec une version qui remplace la InvokeActionMethod méthode.
Cela signifie pas de changement de contrôleur de l'héritage, et il peut facilement être enlevé lorsque je mettre à MVC4 en modifiant le conteneur d'injection de dépendances d'inscription pour TOUS les contrôleurs de
--- EDIT - mise à Jour pour afficher le conteneur d'inscription pour les contrôleurs. Je suis l'aide de l'Unité ici.
Expansion sur la réponse de https://stackoverflow.com/users/183056/sami-beyoglu, si vous avez défini le type de Contenu, jQuery sera en mesure de convertir les données renvoyées dans un objet pour vous.
JObject jo = GetJSON(); return Content(jo.ToString(), "application/json");
Mon Post peut aider quelqu'un.
BaseController
, cela a été l'impact le plus faible chang - juste eu à ajouter la classe et de mettre à jourBaseController
.J'ai fait une version web du service des actions de type sécurisé et simple. Vous l'utilisez comme ceci:
La classe: