2012-02-22 11 views
9

新しいWebAPIベータ版を使用して、OData query string conventionsを使用してクエリでき、OData formatted Jsonを返すWebサービスを構築しようとしています。私はOData 2.0(1.0ではなく)を使いたいと思っています。Asp.Net MVC4 Web API - カスタムMediaTypeFormatterを使用せずにクエリからOData形式のJsonを返しました

それは$selectオプションをサポートしており、ヘッダが$formatオプションを無効にすることができるように見えるようにそれが見えませんが、一般的なIQueryableを返すことは、私が必要とする他のほとんどのクエリオプションのサポートを提供しているようです。

私が本当に苦労しているのは、OData 2.0仕様を満たすJsonオブジェクトを提供する最良の方法です。 WebAPIは照会されると通常のJsonデータを返します。例えば、私はこのような何かのGETリクエストを実行した場合...

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

私のdevのマシン上で指定したRONumberに一致するトップヒットを取得し..to、私は次のようなJSONを含む応答を取得...

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

OData 2.0仕様を満たすJsonが必要です。もっとこのような何か...

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

私は私が欲しいの構造を得るために、カスタムMediaTypeFormatterを書くことができたとします。返されたオブジェクトを変更して、目的のJsonの構造を模倣することもできます。これらの2つのオプションを除いて、WebAPIにOData 2.0形式のJsonオブジェクトを与える巧妙な方法を知っている人はいますか?

答えて

5

正しいシリアル化を実現するには、独自のMediaTypeFormatterを記述する必要があります。私たちはMVC 4ベータ版でODataフォーマッタを出荷しませんでしたが、WCF Web Apiの以前のバージョンでは、どのように記述するかの例があります。 http://wcf.codeplex.com/SourceControl/list/changesets Microsoft.Net.Http.Formatting.ODataを探します(ほとんどのソースを使用できるはずですが、一部の実装の詳細が変更されている可能性があります)。

代わりに、シリアル化するDTOを作成しようとする方法がありますOData v2で予想される形状に変換します。

+0

大丈夫です。情報をくれてありがとう、marcind。 – racingcow

関連する問題