J'essaie de faire en sorte que ma méthode de service WCF renvoie l'objet JSON, mais cela ne fonctionne pas. Lorsque j'ouvre dans un navigateur Web, il affiche xml.
Comment puis-je faire en sorte que cette méthode retourne JSON?
J'ai inséré [WebGet (ResponseFormat = WebMessageFormat.Json)], mais cela n’a pas aidé.
[WebGet(ResponseFormat = WebMessageFormat.Json)]
protected override IEnumerable<KeyValuePair<string, SampleItem>> OnGetItems()
{
// TODO: Change the sample implementation here
if (items.Count == 0)
{
items.Add("A", new SampleItem() { Value = "A" });
items.Add("B", new SampleItem() { Value = "B" });
items.Add("C", new SampleItem() { Value = "C" });
}
return this.items;
}
Réponses:
4 pour la réponse № 1Pour que cela fonctionne, vous devez l'héberger avec le webHttpBinding
et le WebServiceHostFactory
dans votre web.config et service "s *.svc
fichier.
Vous n’avez pas montré de configuration web ou autre, donc je ne peux pas vraiment dire ce que vous faites. Mais le format de réponse JSON dans le WebGet
Cet attribut est uniquement pris en charge dans les services WCF de style REST. le WebGet
Cet attribut est ignoré pour toutes les liaisons basées sur SOAP, par exemple. basicHttpBinding
, wsHttpBinding
, netTcpBinding
etc.
Pour plus d'informations sur les services WCF de style REST, consultez la Centre de développement WCF REST et découvrez comment configurer et utiliser des services WCF de style REST.
Mettre à jour: afin que votre fichier * .svc fonctionne correctement en tant que service REST utilisant le WebGet
attribut et renvoie JSON, vous devez vous assurer de spécifier la fabrique d’hôte de service correcte:
<%@ServiceHost Language="C#" Service="YourService"
Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
En spécifiant le WebServiceHostFactory
, vous demandez au moteur d’exécution WCF d’utiliser ce service en tant que service REST. Tous les autres éléments doivent alors se mettre automatiquement en place.
0 pour la réponse № 2
Avez-vous également défini le comportement WebHttpBehaviour? Sinon, WebGet ne fonctionne pas. Voir MSDN
Et cet attribut s'applique aux opérations de service,méthodes pas simples. Vous ne montrez pas le reste de vos services, mais les exemples que j'ai vus en utilisant WebGet avaient cet attribut dans l'interface (contrat de service).