2010-03-30 46 views
1

有沒有一種方法可以動態更改給定客戶端傳遞的參數的方法上的WebResponseFormat?我默認我的WebResponseFormat爲XML,但我想給客戶機會指定格式爲JSON或XML,如果沒有指定,則默認爲XML。WCF - 動態更改WebResponseFormat

目前我做了以下內容:

[WebGet(UriTemplate = "objects", BodyStyle = WebMessageBodyStyle.Bare)] 
[OperationContract] 
List<SampleObject> GetObjects(); 

用戶可以通過調用它:

http://localhost/rest/myservice/objects 

然後,他們可以指定格式做:

http://localhost/rest/myservice/objects?format=json 

問題是當我嘗試通過設置響應內容類型時:

WebOperationContext.Current.OutgoingResponse.ContentType = "application/json"; 

這只是返回XML,但瀏覽器嘗試像JSON對象一樣處理它,而不是將響應序列化爲JSON。

在使用Stream作爲返回值並自己序列化響應之外,.NET 3.5還有可能嗎?如果沒有,是否有更好的解決方案?

回答

1

我能夠這樣做,以解決這一以下內容:

[WebGet(UriTemplate = "objects", BodyStyle = WebMessageBodyStyle.Bare)] 
[OperationContract] 
List<SampleObject> GetObjects(); 

[WebGet(UriTemplate = "objects?format=json", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] 
[OperationContract] 
List<SampleObject> GetObjectsInJson(); 

這是不漂亮,但如果格式= XML定義或離開,則默認爲我的承包經營合同,但如果格式= json被定義,它默認爲第二個操作合約。這成功地將結果作爲JSON和XML返回。

0

對於.NET 3.5和WCF REST 3.5,我不知道有什麼辦法可以優雅地做到這一點。

.NET 4和.NET 4中的WCF REST將支持您使用的「內容協商」策略 - 只需設置ContentType = "application/json"將導致服務自動返回JSON而不是XML。因此,如果有任何機會,等待.NET 4(應該在2010年4月中旬),並使用它 - 無論如何,它應該在WCF中提供很多改進,尤其是在WCF REST區域。

+0

感謝您的建議。 .NET 4.0有很多強大的功能,但我不認爲我工作的公司會很快將我們升級到VS2k10和.NET 4.0。 查看我的答案,我是如何解決這個問題的。 – Brandon 2010-04-01 14:38:31