Compte tenu de la classe suivante,
public class Result
{
public bool Success { get; set; }
public string Message { get; set; }
}
Je retourne l'un de ceux-ci dans une action de contrôleur comme ceci,
return Json(new Result() { Success = true, Message = "test"})
Cependant, mon framework côté client s'attend à ce que ces propriétés soient un succès et un message en minuscule. Sans avoir réellement à avoir des noms de propriétés en minuscules, est-ce un moyen de réaliser cette pensée l'appel de fonction Json normal?
asp.net-mvc
json
James Hughes
la source
la source
Changer de sérialiseur est simple si vous utilisez l'API Web, mais malheureusement MVC lui-même l'utilise
JavaScriptSerializer
sans option pour le changer pour utiliser JSON.Net.La réponse de James et la réponse de Daniel vous donnent la flexibilité de JSON.Net, mais signifie que partout où vous auriez normalement
return Json(obj)
besoin de changer pourreturn new JsonNetResult(obj)
ou similaire, ce qui, si vous avez un grand projet, pourrait s'avérer un problème, et n'est pas non plus très flexible si vous changez d'avis sur le sérialiseur que vous souhaitez utiliser.J'ai décidé de suivre la
ActionFilter
voie. Le code ci-dessous vous permet d'effectuer n'importe quelle action en utilisantJsonResult
et de lui appliquer simplement un attribut pour utiliser JSON.Net (avec des propriétés en minuscules):Vous pouvez même configurer cela pour qu'il s'applique automatiquement à toutes les actions (avec seulement la performance mineure d'une
is
vérification):FilterConfig.cs
Le code
la source
Avec ma solution, vous pouvez renommer chaque propriété que vous souhaitez.
J'ai trouvé une partie de la solution ici et sur SO
Pour que dans mon contrôleur, je puisse faire ça
Dans mon modèle, je peux maintenant avoir:
Notez que maintenant, vous devez définir le
JsonPropertyAttribute
sur chaque propriété que vous souhaitez sérialiser.la source
Bien que ce soit une vieille question, j'espère que l'extrait de code ci-dessous sera utile aux autres,
Je l'ai fait ci-dessous avec l'API Web MVC5.
la source
Vous pouvez ajouter ce paramètre à
Global.asax
, et il fonctionnera partout.la source