2012-04-25 57 views
1

使用WCF Data Services Toolkit或其他方式來支持$format參數,如JSONPSupportInspectorAttribute我收到了一些json響應,這對我來說有點奇怪。WCF數據服務 - JSON響應有額外的「結果」部分

爲什麼我的JSON的樣子:

{ 
"d" : { 
"results": [ 
{ 
"__metadata": { 

當從OData.org $format的JSON如下:

{ 
"d" : [ 
{ 
"__metadata": { 

爲什麼我的有一個額外的 「效果」 分節?

我的數據服務只是直接構建到我的實體框架模型上。我是否必須使用特定的上下文模板才能消失?

回答

2

這是版本控制。在V2中,我們添加了服務器驅動的分頁和內聯計數功能,這些功能需要在提要上存儲額外的元數據。但由於V1中的feed僅僅是一個JSON數組,所以沒有地方放置這樣的元數據。

因此,在V2​​中,所有在響應中的提要都封裝在「結果」包裝中。那就是feed是一個JSON對象,它有一個叫做「results」的屬性,它有數組。 Feed對象上可能還有其他屬性(下一個鏈接,計數,...)。

有效負載的版本控制基於該有效負載中任何功能所需的最低版本。因此,如果您的服務使用的版本要求版本高於V1的版本,則整個有效內容將使用該更高版本編寫。

你可以看到這甚至在odata.org服務 - 試試這個: http://services.odata.org/OData/OData.svc/Products $ inlinecount =所有頁& $格式= JSON

的響應將是V2,並將使用效果的包裝?

+0

負載確實帶有版本信息。 DataServiceVersion頭是爲此目的。所以沒有必要猜測。上面的描述是關於服務器決定使用哪個版本來響應客戶端請求,而不是讀取現有的有效負載。 – 2012-06-28 11:40:36

+0

我很抱歉你說得對。有一個標題表示版本。我不知道我是如何錯過它的,可能是代理服務器正在剝離它,我不知道。但無論如何,謝謝。 – Aliostad 2012-06-28 11:59:41

+0

順便說一下,恕我直言,這個信息應該已經實現了,例如:Content-Type:application/json; DataServiceVersion = 2.0'。在版本號中也有一個';'分號,這個分號並不好。 – Aliostad 2012-06-28 12:08:33