Retourne JsonResult depuis Web Api sans ses propriétés
J'ai une Web API contrôleur et à partir de là je suis de retour d'un objet JSON à partir d'une action.
Je fais comme ceci:
public ActionResult GetAllNotificationSettings()
{
var result = new List<ListItems>();
//Filling the list with data here...
//Then I return the list
return new JsonResult { Data = result };
}
Mais de cette façon la JsonResult objet, y compris ses Data
attribut est sérialisé en JSON. Ma dernière JSON qui est de retour par l'action ressemble à ceci:
{
"ContentEncoding": null,
"ContentType": null,
"Data": {
"ListItems": [
{
"ListId": 2,
"Name": "John Doe"
},
{
"ListId": 3,
"Name": "Jane Doe"
},
]
},
"JsonRequestBehavior": 1,
"MaxJsonLength": null,
"RecursionLimit": null
}
Je ne peux pas sérialiser cette chaîne JSON parce que le JsonResult
objet ajouté toutes sortes d'autres propriétés. Je suis seulement intéressé dans ListItems
rien d'autre. Mais il ajoute automatiquement des choses comme: ContentType
MaxJsonLength
etc...
Maintenant cela ne fonctionne pas pour moi à cause de toutes les autres propriétés de la chaîne JSON...
var myList = JsonConvert.DeserializeObject<List<ListItems>>(jsonString);
Est-il un moyen d'envoyer un objet JSON à partir de l'action de sorte qu'il ne sera pas ajouter toutes les propriétés que je n'ai pas besoin?
source d'informationauteur Vivendi
Vous devez vous connecter pour publier un commentaire.
Comme quelqu'un qui a travaillé avec ASP.NET API pour environ 3 ans, je vous recommande de retourner un HttpResponseMessage à la place. N'utilisez pas le ActionResult ou IEnumerable!
ActionResult est mauvais parce que comme vous l'avez découvert.
Retour IEnumerable<> est mauvais parce que vous pouvez l'étendre plus tard et ajouter des en-têtes, etc.
À l'aide de JsonResult est mauvais parce que vous devriez permettre à votre service pour être extensible et le soutien d'autres formats de réponse ainsi juste au cas où dans le futur; si vous voulez sérieusement à la limite, vous pouvez le faire en utilisant l'Action Attributs, pas dans l'action du corps.
Dans mes tests, j'ai l'habitude d'utiliser les dessous de la méthode d'aide à extraire mes objets à partir de la HttpResponseMessage:
De cette façon, vous avez atteint le ci-dessous:
Regardez ceci: http://www.asp.net/web-api/overview/formats-and-model-binding/content-negotiation
Lors de l'utilisation de WebAPI, il suffit de retourner l'Objet plutôt que spécifiquement retour Json, que l'API soit de retour JSON ou XML en fonction de la demande.
Je ne suis pas sûr de savoir pourquoi votre WebAPI est au retour d'une ActionResult, mais je voudrais changer le code pour quelque chose comme;
Ce résultat JSON si vous appelez d'un code AJAX.
P. S
WebAPI est censé être paisible, de sorte que votre Contrôleur doit être appelé
ListItemController
et votre Méthode doit être appelée uniquementGet
. Mais c'est pour un autre jour.J'ai eu un problème similaire (différences étant que je voulais renvoyer un objet qui a déjà été converti en chaîne json et mon contrôleur obtenir renvoie une IHttpActionResult)
Voici comment je l'ai résolu. D'abord, j'ai déclaré une classe utilitaire
Cette classe peut ensuite être utilisé dans votre contrôleur. Voici un exemple simple