2010-08-12 2 views
25

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

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

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

+0

Это хак, но если вы хотите вернуть JSON по умолчанию в вашем ODataConfig (или WebApiConfig) под App_Start вы можете добавьте эту строку кода в конец вашего метода 'Register':' config.Formatters.JsonFormatter.SupportedMediaTypes.Add (новый MediaTypeHeaderValue ("text/html")); '. – BrainSlugs83

+1

idk, но я должен написать 'json' все в нижнем регистре, а затем он работает. Может быть, CaSeSeNsItIvE? – inetphantom

+0

Тот же результат здесь, мне просто нужно написать 'json' в нижнем регистре. В качестве альтернативы, установка заголовка запроса на 'Accept: application/json' также работала –

ответ

7

В раздел заголовка запроса необходимо добавить «Принять: приложение/json».

Заканчивать this link

+0

, что имеет смысл, я попробую его на этой неделе и дам вам знать, что вы знаете спасибо – wil

+0

ИМХО это правильный ответ. Однако обратите внимание, что некоторые веб-службы OData поддерживают только Atom (xml). – BrainSlugs83

21

Скачать и установить Fiddler.

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

После установки, откройте его, нажмите на вкладку «Request Builder», расположенной в правой части Скрипач.

Вставьте этот URL:

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

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

В "Request Headers" раздел, вставьте следующую строку:

accept: application/json 

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

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

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

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

http://jsonviewer.codeplex.com/

+0

Fiddler говорит <ошибка xmlns = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata "> Не поддерживается тип носителя.

+0

Я использовал Postman, но мне нужно было знать заголовок запроса 'accept: application/json' Спасибо! –

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 из служб данных вы можете легко вернуться OData в формате JSON, указав его в URL, как в образце вы дали - http://odata.netflix.com/Catalog/Titles $ формата = JSON

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

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

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

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

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

Accept: application/json;odata=verbose 

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

Accept: application/json 

больше не достаточно. Больше информации here.

0

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

«Формат = JSON»

Смежные вопросы