web-dev-qa-db-fra.com

comment renvoyer le format JSON depuis ODATA?

Je sais que ODATA peut renvoyer JSON mais je ne suis pas sûr si je dois utiliser un attribut ou une interface pour le faire.

Je veux que ce soit comme http://odata.netflix.com/Catalog/Titles ? $ Format = JSON mais mon service odata ne renvoie pas JSON. Lorsque je l'appelle comme www.foo.com/service?$format=json, il renvoie simplement le code XML.

Que dois-je faire pour renvoyer json avec ODATA?

27
wil

Téléchargez et installez Fiddler.

http://www.fiddler2.com/fiddler2/

Une fois installé, ouvrez-le, cliquez sur l'onglet "Générateur de requêtes" situé à droite de Fiddler.

Insérer cette URL:

http://test.com/feed2/ODataService.svc/results

Notez que vous N'AVEZ PAS BESOIN DU? $ Format = JSON

Dans la section "Request Headers", insérez la ligne suivante:

accept: application/json

Appuyez sur le gros bouton "Exécuter" en haut à droite de Fiddler.

Vous verrez les résultats de la demande ajoutés à la liste à gauche de Fiddler.

Double-cliquez sur la demande. Le côté droit de Fiddler deviendra l'onglet "Inspecteurs" où vous pourrez voir les résultats de votre demande.

De plus, puisque vous travaillez avec Json, vous voudrez probablement télécharger et installer le plugin Json Viewer pour Fiddler:

http://jsonviewer.codeplex.com/

23
lamarant

Les nouvelles versions de WCF Data Services prennent en charge JSON par défaut et vous devez avoir

Accept: application/json;odata=verbose

dans l'en-tête de la demande.

Accept: application/json

n'est plus suffisant. Plus d'infos ici .

13
Nate Cook

Personne ne semble répondre à votre question très proprement ici!

A partir d'une page HTML, vous pouvez utiliser le code Javascript/JQuery suivant pour qu'un service de données WCF renvoie les données au format JSON.

    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">

        var sURL = "http://YourService.svc/Books(10)";

        function testJSONfetch() {

            $.ajax({
                type: "GET",
                contentType: "application/json; charset=utf-8",
                datatype: "json",
                url: sURL,
                error: bad,
                success: good,
                beforeSend: function (XMLHttpRequest) {
                    //Specifying this header ensures that the results will be returned as JSON.
                    XMLHttpRequest.setRequestHeader("Accept", "application/json");
                }
            });

        }

        function good(response)
        {

        }

        function bad(response) 
        {

        }

    </script>
9
Oli Gray

Vous devez ajouter «Accepter: application/json» dans la section en-tête de la requête.

Découvrez ce lien

7
Glaxalg

Si vous utilisez le fournisseur ODATA de Data Services, vous pouvez facilement renvoyer ODATA au format JSON en le spécifiant dans l'URL, comme dans l'exemple que vous avez fourni - http://odata.netflix.com/Catalog/Titles ? $ format = JSON 

Pour ce faire, utilisez le support de formats contrôlé par JSONp et par URL pour le téléchargement de ADO.NET Data Services à partir de MSDN http://code.msdn.Microsoft.com/DataServicesJSONP et ajoutez le décorateur JSONPSupportBehavior à votre classe DataService, comme ci-dessous.

[JSONPSupportBehavior]
public class MyDataService : DataService<MyContextType>
{
     ...
4
zackdever

"... mais j'obtiens" La page Web est introuvable "avec http://test.com/feed2/ODataService.svc/results ? $ format = JSON ..."

vous n’avez pas besoin du $ format = JSON dans l’Uri.

Utilisez simplement " http://test.com/feed2/ODataService.svc/results "

(avec Accept: application/json dans l'en-tête de la requête)

2
user4816271

Réponse tardive, mais j'ai passé la dernière heure à essayer de comprendre comment curliser les API OData et renvoyer le résultat au format json. Le code suivant récupère le document dans json et l'écrit dans un fichier:

-o myfile.html -H "Accept: application/json" http://example.com/api/data?$filter=name eq 'whatever'
1
user1781186

Ce n'est pas joli mais c'est comme ça que j'ai forcé la sortie JSON sans utiliser le format $ dans la chaîne de requête:

    Request r = new Request(Method.GET, "http://XXXXXXX.svc//Login"
                 + "&UserId=" + "'" + "user" + "'" 
                 + "&Password=" + "'" + "password" + "'");

    ClientInfo ci = r.getClientInfo();
    ArrayList<Preference<MediaType>> accepted = new ArrayList<Preference<MediaType>>();
    accepted.add(new Preference<MediaType>(MediaType.APPLICATION_JSON));
    ci.setAcceptedMediaTypes(accepted);

    Client client = new Client(Protocol.HTTP);  
    Response response = client.handle(r);  
    Representation output = response.getEntity();  
0
Steven Veltema

... utilisez seulement des lettres minuscules: 

"format = json"

0
Radosław Kiela