2010-08-16 48 views
5

我目前正在嘗試使用WCF數據服務作爲一種方式來打開我們的產品多一點,同時能夠使用來自AJAX的數據。我注意到一個現象是,JSON表示形式格式有跨數據灑這些__metada成員和OData的文檔中,我發現這個(Representing Entries下):WCF數據服務:如何避免__metadata成員

可選的「__metadata」名/值 對是應該是 包含在對象上的唯一對不是 直接表示正在表示的 條目的屬性。此 名稱/值對不是數據,而是 而是按照此 文檔中定義的約定,指定代表的條目的元數據 。

我的問題是,如果此元數據是可選的,如何關閉它以節省帶寬?

回答

2

你說得對,WCF數據服務服務器實現沒有能力不發送__metadata。協議使其成爲可選的事實並不意味着具體的實現不會總是發送它。在這種情況下,服務器生成__metadata,因爲它可能包含客戶端的重要信息,並且沒有有效負載可能沒有意義或提供不完整的信息。 當前服務器也不提供任何選項來更改此行爲。

+1

確實如此,但服務器可以以不需要元數據的客戶端已知的自定義查詢選項的形式實現它。 – 2010-08-16 17:45:50

+0

你說得對。您可以將其作爲建議功能添加到我們的連接網站。它將幫助我們規劃下一個版本。 https://connect.microsoft.com/dataplatform/content/content.aspx?ContentID=15540 – 2010-08-16 19:44:24

0

在Reflector中花費一些時間後,它看起來唯一的方法就是編寫我自己的System.Data.Services.Serializers.JsonSerializer版本。寫入元數據對象WriteMetadataObject的方法是從WriteComplexTypeProperties和WriteElementWithName中調用的,而不考慮任何會跳過該部分的設置。

現在我必須考慮編寫一個序列化程序,它將寫出所需的JSON,並使用自定義$格式名稱將其掛接到管道中。