2010-08-12 112 views
25

我知道ODATA可以返回json,但不知道是否必須使用屬性或接口來完成此操作。如何從ODATA返回json格式?

我希望它像http://odata.netflix.com/Catalog/Titles?$ format = JSON,但我的odata服務不返回JSON。當我將它稱爲www.foo.com/service?$format=json時,它只是返回XML。

我需要做什麼才能使用ODATA返回json?

+0

這是一個黑客,但如果你想用默認App_Start下返回JSON,在你的ODataConfig(或WebApiConfig),你可以將這行代碼添加到'Register'方法的底部:'config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue(「text/html」));'。 – BrainSlugs83 2015-06-20 00:23:26

+1

idk,但我必須寫'json'全部小寫,然後它的作品。也許CaSeSeNsItIvE? – inetphantom 2016-01-04 14:03:36

+0

同樣的結果在這裏,我只需要寫小寫的'json'。或者,將請求標頭設置爲'Accept:application/json'也可以工作 – 2016-06-09 19:20:06

回答

7

您需要將「Accept:application/json」添加到請求標題部分。

退房this link

+0

這很有道理,我會在本週嘗試一下,讓你知道 謝謝 – wil 2010-08-14 22:14:30

+0

恕我直言,這是正確的答案。但是請注意,一些OData Web服務僅支持Atom(xml)。 – BrainSlugs83 2012-05-24 22:51:19

21

下載並安裝小提琴手。

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

安裝完成後,打開它,單擊位於提琴手的右側的「請求生成器」選項卡上。

插入此網址:

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

請注意,您不需要$格式= JSON

在 「請求頭」 部分,插入以下行:

accept: application/json 

擊中Fiddler右上方的Big「Execute」按鈕。

您會看到請求的結果添加到Fiddler左側的列表中。

雙擊請求。 Fiddler的右側將更改爲「Inspectors」選項卡,您可以在其中查看請求的結果。

而且,因爲你是使用JSON的工作,你可能要下載並安裝小提琴手json的瀏覽器插件:

http://jsonviewer.codeplex.com/

+0

Fiddler說<?xml version =「1.0」encoding =「utf-8」standalone =「yes」?> 請求的不支持的媒體類型。 2013-02-07 17:37:34

+0

我用Postman,但我需要知道的是請求頭'accept:application/json'謝謝! – 2016-06-09 19:15:11

0

它不漂亮,但我這是怎麼強迫JSON輸出不使用$格式請求字符串:

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(); 
9

沒有人似乎在這裏很乾淨地回答你的問題!

在HTML頁面中,您可以使用以下Javascript/JQuery代碼讓WCF數據服務以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> 
4

如果您使用數據服務的ODATA提供商,你可以很容易地通過在URL中指定它作爲你給的樣品中返回ODATA爲JSON - http://odata.netflix.com/Catalog/Titles $格式= JSON

要做到它使用JSONp和URL控制的格式支持從MSDN http://code.msdn.microsoft.com/DataServicesJSONP下載ADO.NET Data Services,並將JSONPSupportBehavior裝飾器添加到您的DataService類中,如下所示。

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

最後回答,但我一直在花費最後一小時試圖找出如何捲曲OData APIs並將結果作爲json返回。默認情況下

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

WCF數據服務支持JSON的較新版本,你必須有

Accept: application/json;odata=verbose 
在請求頭

:下面的代碼讀取文件中的JSON,並將其寫入文件。

Accept: application/json 

不再足夠。更多信息here

0

...只使用小寫字母:

「格式= json的」