2012-02-22 14 views
9

Estoy tratando de utilizar el nuevo WebAPI beta para construir un servicio web que puedo consultar con el OData query string conventions y tienen que volver OData formatted Json. También quiero usar OData 2.0 (en lugar de 1.0).Asp.Net MVC4 Web API - Volver OData el formato JSON de consulta sin MediaTypeFormatter encargo

Aunque no parezca que tiene soporte para la opción $select y las cabeceras parece ser capaz de anular la opción $format, devolver un IQueryable parece genérico para proporcionar soporte para la mayoría de las otras opciones de consulta que necesito.

Lo que realmente estoy luchando con la mejor manera de proporcionar objetos Json que cumplan con la especificación OData 2.0. WebAPI simplemente devuelve datos Json normales cuando se le consulta. Por ejemplo, si realizo una petición GET de algo como esto ...

http://localhost:XXXXX/vendor/?$filter=RONUMBER eq '2597385'&$select=VENDORID,VENDORNAME&$top=1&$format=Json 

..para conseguir el éxito superior concuerden con la RONumber especificado en mi máquina dev, consigo una respuesta que contiene la siguiente JSON ...

[{"MEPartNumber":"11-2222-3-4444","MFGPartNumber":"123456-123","MFGSerialNumber":"ABC123","RONumber":"987654321","VendorId":"1234567","VendorName":"ACME SERVICE CENTER"}] 

Necesito Json que cumpla con la especificación OData 2.0. Algo de la misma familia ..

OData V2: { 
    "d" : { 
    "results": { 
     "__metadata": { 
      "uri": "http://someserver/foo/vendor(1)", 
      "type": "Vendor" 
     }, 
     "MEPartNumber": "11-2222-3-4444", 
     "MFGPartNumber": "123456-123", 
     "MFGSerialNumber": "ABC123", 
     "RONumber":"987654321", 
     "VendorId":"1234567", 
     "VendorName": "ACME SERVICE CENTER" 
    } 
    } 
} 

supongo que podría escribir una costumbre MediaTypeFormatter para obtener la estructura que yo quiero. También podría ser capaz de modificar mis objetos devueltos para imitar la estructura del Json deseado. Aparte de estas dos opciones, ¿alguien sabe de una forma inteligente de hacer que WebAPI me proporcione objetos Json con formato OData 2.0?

Respuesta

5

Debe escribir su propio MediaTypeFormatter para proporcionar la serialización correcta. No enviamos un formateador OData en el MVC 4 Beta, pero la versión anterior de WCF Web Api tiene algunos ejemplos de cómo escribir uno. http://wcf.codeplex.com/SourceControl/list/changesets Busque Microsoft.Net.Http.Formatting.OData (debería poder usar la mayor parte de la fuente, aunque algunos detalles de implementación podrían haber cambiado)

Una alternativa sería intentar construir una DTO que serializaría a la forma esperada por OData v2.

+0

Bien. Gracias por la información, marcind. – racingcow

Cuestiones relacionadas