调用wcf rest服务并将数据作为xml或json返回

时间:2013-10-15 18:57:55

标签: c# json wcf serialization wcf-rest

我正在尝试从WCF REST服务获取数据,以xml或json的形式返回。

使用WebInvoke属性设置RequestFormat和ResponseFormat并将两者设置为适当的格式时,我可以将数据作为xml或json返回:

但是我不想对格式进行硬编码,所以在网上进一步研究它,我发现了一些事情,但无论我做什么,它似乎总是以xml格式返回我的数据。

以下是我所做的:

  1. 从WebInvoke属性中删除了RequestFormat和ResponseFormat。

    [OperationContract]
    [WebInvoke(
       Method = "GET",
       RequestFormat = WebMessageFormat.Json,
       ResponseFormat = WebMessageFormat.Json,
       BodyStyle = WebMessageBodyStyle.Wrapped,
       UriTemplate = "Search/{searchName}/{fieldValues}")]
    Result Search(string searchName, string fieldValues);
    
  2. 我将以下部分添加到我的web.config:

    <system.serviceModel>
      <standardEndpoints>
        <webHttpEndpoint>
          <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
        </webHttpEndpoint>
      </standardEndpoints>
    </system.serviceModel>
    

    我不知道上面是否需要,因为我能够在我的web.config中使用这两种格式进行格式化,但我想,它确实说自动化格式

  3. 调用WebClient时,我将Content-TypeAccept标头设置为application/xml或`application / json。

    但即使进行了这些更改并将标头设置为application/json,它仍然会将数据作为XML返回。

    我在Fiddler尝试过,但同样的事情。收到请求,返回响应,但是以xml。

  4. 我也尝试将以下代码放入调用WCF方法中,但仍然没有好处:

    WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";
    
  5. 最后,我找到了这个article并按照我所知的步骤进行了操作,但再次没有好处!只需查看“邮件格式选择部分”。

  6. 我显然错过了什么,但是什么?有没有人对如何实现这一点有任何想法?

1 个答案:

答案 0 :(得分:0)

您要求的是我今天真正实现的目标。我需要创建一个RESTful服务,提供JSON或XML作为回报。它有点特定于域,但如果您在行之间阅读,则以下博客显示如何通过MemoryStream返回类型实现此目的:

http://www.j4jayant.com/articles/fhir/22-fhir-feel-2

在GetResourceFeed函数中,您可以看到请求中的Accept值如何用于在JSON和XML(atom)之间切换。请随意尝试。