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?
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:
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 .
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>
Vous devez ajouter «Accepter: application/json» dans la section en-tête de la requête.
Découvrez ce lien
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>
{
...
"... 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)
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'
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();
... utilisez seulement des lettres minuscules:
"format = json"