如何从ODATA返回json格式?

时间:2010-08-12 14:09:57

标签: json odata

我知道ODATA可以返回json但不确定我是否必须使用属性或接口来执行此操作。

我希望它像http://odata.netflix.com/Catalog/Titles一样?$ format = JSON但我的odata服务不返回JSON。当我把它称为www.foo.com/service?$format=json时,它只返回XML。

使用ODATA返回json需要做什么?

9 个答案:

答案 0 :(得分:23)

下载并安装Fiddler。

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

安装完成后,打开它,点击Fiddler右侧的“Request Builder”标签。

插入此网址:

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

请注意,您不需要?$ format = JSON

在“请求标头”部分中,插入以下行:

accept: application/json

点击Fiddler右上角的Big“Execute”按钮。

您会看到请求的结果已添加到Fiddler左侧的列表中。

双击请求。 Fiddler的右侧将更改为“Inspectors”选项卡,您可以在其中查看请求的结果。

此外,既然你正在使用Json,你可能想下载并安装Fiddler的Json viewer插件:

http://jsonviewer.codeplex.com/

答案 1 :(得分:13)

默认情况下,较新版本的WCF数据服务支持JSON,您必须具有

Accept: application/json;odata=verbose
请求标题中的

Accept: application/json

已经不够了。更多信息here

答案 2 :(得分: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>

答案 3 :(得分:7)

您需要在请求标题部分添加“Accept:application / json”。

查看this link

答案 4 :(得分:4)

如果您正在使用Data Services中的ODATA提供程序,您可以轻松地将ODATA作为JSON返回,方法是在URL中指定它,如您提供的样本中所示 - http://odata.netflix.com/Catalog/Titles?$ format = JSON

为此,请使用从MSDN http://code.msdn.microsoft.com/DataServicesJSONP下载的ADO.NET数据服务的JSONp和URL控制格式支持,并将JSONPSupportBehavior装饰器添加到您的DataService类中,如下所示。

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

答案 5 :(得分:2)

“......但我得到”使用http://test.com/feed2/ODataService.svc/results无法找到网页?$ format = JSON ...“

你不需要在Uri中使用$ format = JSON。

只需使用“http://test.com/feed2/ODataService.svc/results

即可

(在请求标头中使用Accept:application / json)

答案 6 :(得分:1)

迟到的答案,但我一直在花费最后一小时试图弄清楚如何卷曲OData API并将结果作为json返回。以下代码在json中获取文档并将其写入文件:

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

答案 7 :(得分:0)

它不漂亮,但这是我在请求字符串中不使用$ format强制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();  

答案 8 :(得分:0)

...只使用小写字母:

“格式= JSON”