2010-08-12 19 views
25

Sé que ODATA puede devolver json pero no estoy seguro si tengo que usar un atributo o interfaz para hacerlo.cómo devolver el formato json desde ODATA?

Quiero que haga como http://odata.netflix.com/Catalog/Titles? $ Format = JSON pero mi servicio de odata no devuelve JSON. Cuando lo llamo como www.foo.com/service?$format=json, simplemente devuelve XML.

¿Qué debo hacer para devolver json con ODATA?

+0

Es un truco, pero si desea volver JSON por defecto, en su ODataConfig (o WebApiConfig) bajo App_Start Puede agregue esta línea de código al final de su método 'Register':' config.Formatters.JsonFormatter.SupportedMediaTypes.Add (new MediaTypeHeaderValue ("text/html")); '. – BrainSlugs83

+1

idk pero tengo que escribir 'json' todo en minúsculas y luego funciona. Tal vez CaSeSeNsItIvE? – inetphantom

+0

Mismo resultado aquí, solo necesitaba escribir 'json' en minúsculas. Alternativamente, configurar el encabezado de solicitud para 'Aceptar: application/json' también funcionó –

Respuesta

7

Debe agregar "Aceptar: aplicación/json" en la sección del encabezado de la solicitud.

Salida this link

+0

que tiene sentido, voy a probarlo esta semana y les permiten saber gracias – wil

+0

en mi humilde opinión esta es la respuesta correcta. Sin embargo, tenga en cuenta que algunos servicios web de OData solo son compatibles con Atom (xml). – BrainSlugs83

21

descargar e instalar violinista.

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

Una vez instalado, abrirlo, haga clic en la pestaña "Solicitud Constructor" que se encuentra en el lado derecho del violinista.

Insertar este URL:?

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

Tenga en cuenta que no es necesario el formato $ = JSON

el formulario "Solicitud encabezados" sección, inserte la siguiente línea:

accept: application/json 

Pulse el botón "Ejecutar" grande en la parte superior derecha de Fiddler.

Verá los resultados de la solicitud añadidos a la lista en el lado izquierdo de Fiddler.

Haz doble clic en la solicitud. El lado derecho de Fiddler cambiará a la pestaña "Inspectores" donde puede ver los resultados de su solicitud.

Además, dado que se está trabajando con JSON, es probable que desee descargar e instalar el plug-in visor de JSON para Fiddler:

http://jsonviewer.codeplex.com/

+0

Fiddler dice Tipo de medio incompatible solicitado.

+0

Utilicé Postman, pero lo que necesitaba saber era el encabezado de la solicitud 'accept: application/json' ¡Gracias! –

0

No es bonito, pero así es como Forcé salida JSON sin usar $ formato en la cadena de solicitud:

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

¡Nadie parece estar respondiendo a su pregunta muy limpiamente aquí!

Desde una página HTML puede usar el siguiente código Javascript/JQuery para tener un servicio de datos WCF que devuelva datos en formato 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

Si está utilizando el proveedor de odata por servicios de datos se puede volver fácilmente odata como JSON especificándolo en la URL como en el ejemplo que diste? - http://odata.netflix.com/Catalog/Titles formato JSON $ =

Para hacer esto usa el soporte de formato JSONp y controlado por URL para la descarga de ADO.NET Data Services desde MSDN http://code.msdn.microsoft.com/DataServicesJSONP y agrega el decorador JSONPSupportBehavior a tu clase DataService como se muestra a continuación.

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

respuesta tardía, pero me he pasado la última hora tratando de encontrar la manera de rizar OData API y devolver el resultado como JSON. El siguiente código obtiene el documento JSON y lo escribe en un archivo:

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

Las nuevas versiones de JSON apoyo WCF Data Services de forma predeterminada y debe tener

Accept: application/json;odata=verbose 

en el encabezado de la solicitud.

Accept: application/json 

ya no es suficiente. Más información here.

0

... sólo tiene que utilizar letras minúsculas:

"format = json"

Cuestiones relacionadas