Подтвердить что ты не робот

Как вернуть формат json из ODATA?

Я знаю, что ODATA может вернуть json, но не уверен, что мне нужно использовать атрибут или интерфейс для этого.

Я хочу, чтобы это было как http://odata.netflix.com/Catalog/Titles? $format = JSON, но моя служба odata не возвращает JSON. Когда я называю это как www.foo.com/service?$format=json, он просто возвращает XML.

Что мне нужно сделать, чтобы вернуть json с ODATA?

4b9b3361

Ответ 1

Загрузите и установите Fiddler.

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

После установки, откройте его, щелкните вкладку "Конструктор запросов", расположенную в правой части Fiddler.

Вставьте этот URL-адрес:

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

Обратите внимание, что вам НЕ НУЖНО? $format = JSON

В разделе "Заголовки запросов" вставьте следующую строку:

accept: application/json

Нажмите кнопку "Выполнить" в правом верхнем углу экрана Fiddler.

Вы увидите результаты запроса, добавленного в список слева от Fiddler.

Дважды щелкните запрос. Правая сторона Fiddler изменится на вкладку "Инспекторы", где вы сможете увидеть результаты вашего запроса.

Кроме того, поскольку вы работаете с Json, вы, вероятно, захотите загрузить и установить плагин Json viewer для Fiddler:

http://jsonviewer.codeplex.com/

Ответ 2

Новые версии служб данных WCF поддерживают JSON по умолчанию, и вы должны иметь

Accept: application/json;odata=verbose

в заголовке запроса.

Accept: application/json

уже недостаточно. Подробнее здесь.

Ответ 3

Никто, кажется, не отвечает на ваш вопрос очень чисто здесь!

На странице 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

Вам нужно добавить "Accept: application/json" в раздел заголовка запроса.

Отметьте эту ссылку

Ответ 5

Если вы используете поставщика ODATA из Data Services, вы можете легко вернуть ODATA как JSON, указав его в URL-адресе, как в примере, который вы дали - http://odata.netflix.com/Catalog/Titles? $format = JSON

Для этого используйте поддержку формата JSONp и URL-адреса для загрузки данных служб ADO.NET из MSDN http://code.msdn.microsoft.com/DataServicesJSONP и добавьте JSONPSupportBehavior decorator к вашему классу DataService, как показано ниже.

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

Ответ 7

Поздний ответ, но я потратил последний час, пытаясь выяснить, как скручивать API OData и возвращать результат как json. Следующий код извлекает документ в json и записывает его в файл:

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

Ответ 8

Это не очень, но это то, как я принудительно вывел вывод 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

... просто используйте строчные буквы:

"Формат = JSON"