Retourner les types anonymes avec l'API Web
Lors de l'utilisation de MVC, retour adhoc Json a été facile.
return Json(new { Message = "Hello"});
Je suis à la recherche de cette fonctionnalité avec la nouvelle API Web.
public HttpResponseMessage<object> Test()
{
return new HttpResponseMessage<object>(new { Message = "Hello" }, HttpStatusCode.OK);
}
Ce lève une exception, comme le DataContractJsonSerializer
ne peut pas traiter tous les types anonymes.
J'ai remplacé cette JsonNetFormatter basé sur Json.Net.
Cela fonctionne si j'utilise
public object Test()
{
return new { Message = "Hello" };
}
mais je ne vois pas l'intérêt de l'utilisation de l'API Web si je ne suis pas de retour HttpResponseMessage
, je serais mieux coller avec de la vanille MVC. Si j'essaie de l'utiliser:
public HttpResponseMessage<object> Test()
{
return new HttpResponseMessage<object>(new { Message = "Hello" }, HttpStatusCode.OK);
}
Il sérialise l'ensemble de la HttpResponseMessage
.
Quelqu'un peut-il me guider vers une solution où je peux retourner les types anonymes dans un HttpResponseMessage
?
Vous devez vous connecter pour publier un commentaire.
Cela ne fonctionne pas dans la version Bêta, mais il le fait dans les derniers bits (construit à partir de http://aspnetwebstack.codeplex.com), donc il va probablement être le moyen pour les RC. Vous pouvez faire
Cette réponse peut venir peu en retard, mais au jour d'aujourd'hui
WebApi 2
est déjà sorti et maintenant il est plus facile de faire ce que vous voulez, vous avez à faire:et le long du pipeline, il sera sérialisée
xml
oujson
selon les préférences du client (leAccept
en-tête). Espérons que cela aide quelqu'un d'achoppement sur cette questionException
?object
- vomirvous pouvez utiliser JsonObject pour cela:
Vous pouvez utiliser un ExandoObject. (ajouter
using System.Dynamic;
)Dans l'API web 2 vous pouvez utiliser la nouvelle IHttpActionResult qui est un remplacement pour HttpResponseMessage et ensuite de retour à un simple objet Json: (Similaire à MVC)
Vous pouvez également essayer:
Vous devriez être en mesure d'obtenir que cela fonctionne si vous utilisez des médicaments génériques, car il vous donnera un "type" pour votre type anonyme. Vous pouvez ensuite lier le sérialiseur pour que.
Si il n'y a pas
DataContract
ouDataMebmer
attributs sur votre classe, il reviendra sur la sérialisation de toutes les propriétés publiques, qui devrait faire exactement ce que vous cherchez.(Je n'aurai pas la chance de pouvoir tester ce jusqu'à plus tard aujourd'hui, laissez-moi savoir si quelque chose ne fonctionne pas.)
Dans ASP.NET l'API Web 2.1, vous pouvez le faire de façon plus simple:
Vous pouvez en lire plus à ce sujet sur https://www.strathweb.com/2014/02/dynamic-action-return-web-api-2-1/
Vous pouvez encapsuler objet dynamique dans le retour de l'objet comme
puis dans WebAPI; faire quelque chose comme: