2010-09-13 75 views
3

我想讓我的WCF服務方法返回JSON對象,但它不起作用,當我在Web瀏覽器中打開它時顯示xml。讓我的WCF服務返回json

如何讓此方法返回JSON?

我已經插入[WebGet(ResponseFormat = WebMessageFormat.Json)],但沒有幫助

[WebGet(ResponseFormat = WebMessageFormat.Json)] 
protected override IEnumerable<KeyValuePair<string, SampleItem>> OnGetItems() 
{ 
    // TODO: Change the sample implementation here 
    if (items.Count == 0) 
    { 
     items.Add("A", new SampleItem() { Value = "A" }); 
     items.Add("B", new SampleItem() { Value = "B" }); 
     items.Add("C", new SampleItem() { Value = "C" }); 
    } 
    return this.items; 
} 

回答

4

爲了這個工作,你需要用webHttpBinding舉辦這次並在WebServiceHostFactory你的web.config和服務的*.svc文件。

你沒有顯示任何web.config或其他配置 - 所以我真的不知道你在做什麼。但WebGet屬性中的JSON響應格式僅在REST風格的WCF服務中受支持。任何基於SOAP的綁定都會忽略WebGet屬性,例如, basicHttpBindingwsHttpBinding,netTcpBinding等等。

有關REST式WCF服務的更多信息,請查看WCF REST Developer Center並閱讀如何設置和使用REST式WCF服務。

更新:爲了讓您的* .svc文件正確的使用了WebGet屬性,並返回JSON REST服務工作,你需要確保指定正確的服務主機工廠:

<%@ServiceHost Language="C#" Service="YourService" 
       Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 

通過指定WebServiceHostFactory,您告訴WCF運行時將此服務用作REST服務,然後所有其他部分應自動歸位。

+0

你給我的例子是,.cs-file – Troj 2010-09-13 22:11:28

+0

.svc-file和.csfile有什麼區別,作爲服務工作 – Troj 2010-09-13 22:11:51

+0

@Troj:用* .svc信息更新了我的答案 – 2010-09-14 04:51:23

0

你還設置了WebHttpBehaviour嗎?否則,WebGet不起作用。見MSDN

而這個屬性適用於服務操作,而不是簡單的方法。您不會顯示其他服務,但我看到使用WebGet的示例在界面(服務合同)中具有此屬性。

+0

Iam沒有使用任何indetface ,iam使用-svc文件 – Troj 2010-09-13 22:07:11