2010-08-12 144 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的”