2012-02-22 5 views
9

Sto tentando di utilizzare la nuova versione WebAPI beta per creare un servizio Web che posso interrogare utilizzando lo OData query string conventions e farlo restituire OData formatted Json. Voglio anche usare OData 2.0 (anziché 1.0).API Web MVC4 Asp.Net - Restituisce ODson formattato JSON dalla query senza MediaTypeFormatter personalizzato

Anche se non guardare come ha il supporto per l'opzione $select e le intestazioni sembrano essere in grado di ignorare l'opzione $format, restituendo un IQueryable sembra generico per fornire il supporto per la maggior parte delle altre opzioni di query che ho bisogno.

Quello con cui sto davvero lottando è il modo migliore per fornire oggetti Json che soddisfano le specifiche OData 2.0. WebAPI restituisce i dati JSON normali quando richiesto. Ad esempio, se effettuo una richiesta GET di qualcosa di simile ...

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

..per ottenere la top hit corrispondente al RONumber specificato sulla mia macchina dev, ottengo una risposta che contiene il seguente JSON ...

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

Ho bisogno di Json che soddisfi le specifiche OData 2.0. Qualcosa di più come questo ..

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" 
    } 
    } 
} 

Suppongo che potrei scrivere un personalizzato MediaTypeFormatter per ottenere la struttura che voglio. Potrei anche essere in grado di modificare i miei oggetti restituiti per simulare la struttura del Json desiderato. A parte queste due opzioni, qualcuno sa di un modo intelligente per far sì che WebAPI mi dia gli oggetti JSON formattati OData 2.0?

risposta

5

È necessario scrivere il proprio numero MediaTypeFormatter per fornire la serializzazione corretta. Non abbiamo spedito un formattatore OData nella MVC 4 Beta, ma la precedente incarnazione di WCF Web Api ha alcuni esempi su come scriverne una. http://wcf.codeplex.com/SourceControl/list/changesets Cerca Microsoft.Net.Http.Formatting.OData (dovresti essere in grado di utilizzare gran parte dell'origine, anche se alcuni dettagli di implementazione potrebbero essere cambiati)

Un'alternativa sarebbe provare a costruire un DTO che dovrebbe serializzare alla forma prevista da OData v2.

+0

Ok. Grazie per le informazioni, marcind. – racingcow