API web Asp.Net MVC4: devuelve Json con formato OData desde una consulta sin MediaTypeFormatter personalizado

StackOverflow https://stackoverflow.com/questions/9389762

Pregunta

Estoy intentando usar el nuevo. API web beta para construir un servicio web que pueda consultar usando el Convenciones de cadenas de consulta de OData y que regrese Json con formato OData.También quiero usar OData 2.0 (en lugar de 1.0).

Si bien no parece que tenga soporte para el $seleccionar opción y los encabezados parecen poder anular el formato $ opción, devolver un IQueryable genérico parece brindar soporte para la mayoría de las otras opciones de consulta que necesito.

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

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

..para obtener el resultado superior que coincida con el número RON especificado en mi máquina de desarrollo, recibo una respuesta que contiene el 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 más como esto..

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 conseguir la estructura que quiero.También podría modificar mis objetos devueltos para imitar la estructura del Json deseado.Aparte de estas dos opciones, ¿alguien conoce alguna forma inteligente de hacer que WebAPI me proporcione objetos Json formateados OData 2.0?

¿Fue útil?

Solución

Necesitas escribir el tuyo MediaTypeFormatter para proporcionar la serialización correcta.No incluimos un formateador OData en MVC 4 Beta, pero la encarnació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 utilizar la mayor parte del código fuente, aunque es posible que algunos detalles de implementación hayan cambiado)

Una alternativa sería intentar construir un DTO que se serialice con la forma esperada por OData v2.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top