调用 wcf 休息服务并以 xml 或 json 格式返回数据

Posted

技术标签:

【中文标题】调用 wcf 休息服务并以 xml 或 json 格式返回数据【英文标题】:call a wcf rest service and return data as xml or json 【发布时间】:2013-10-23 17:07:48 【问题描述】:

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

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

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

这是我所做的:

    从 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);
    

    我在 web.config 中添加了以下部分:

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

    我不知道是否需要上述内容,因为我可以在我的 web.config 中没有此格式的情况下以这两种格式进行格式化,但我猜,它确实显示为 automaticaFormat

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

    但即使在进行了这些更改并将我的标头设置为application/json 之后,它仍然以 XML 格式返回数据。

    我在 Fiddler 中尝试过,但还是一样。收到请求,返回响应但在 xml 中。

    我也尝试将以下代码放入调用 WCF 方法中,但仍然不行:

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

    最后,我找到了这个article,并尽我所能按照步骤操作,但又一次不行!只需查找“消息格式选择部分”即可。

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

【问题讨论】:

ASP.NET Web API 服务内置了此功能。如果可以,请使用它 - 除非您需要非常特定于 WCF 的东西。 【参考方案1】:

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

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

在GetResourceFeed函数中,可以看到请求中的Accept值是如何在JSON和XML(原子)之间切换的。请随时尝试。

【讨论】:

我已经尝试过了。请参阅第 4 点。我再次尝试过,确保我的代码基于您提到的文章,但没有用。它仍然无法以 json 格式返回数据,但如果我使用 WebInvoke,xml/json 都可以正常工作。还有什么建议吗? 您是否将该测试与示例中的 MemoryStream 相结合?您是否将 Result 返回类型替换为 MemoryStream? 我明白你的意思了!我不认为这是重要的部分,但也许这将是实际的解决方案。我自己一直在考虑这个问题,即在服务器端手动转换为相关格式,而不是因为现有问题而依赖 MS 自动完成,也因为 xml 格式问题!我暂时保留这个问题,稍后会更新你,因为我在这方面花了太多时间,而且我在这里面临完成一个项目的压力。但肯定会恢复。

以上是关于调用 wcf 休息服务并以 xml 或 json 格式返回数据的主要内容,如果未能解决你的问题,请参考以下文章

WCF 休息服务不返回 JSON 数据。但它适用于 XML

想将图像从 android 发布到 WCF 休息服务

wcf 休息服务响应中的 xml 被更改 为啥?

WCF服务返回XML或JSON格式数据

如何使用 Json.Net 从我的 WCF 休息服务(.NET 4)返回 json,而不是用引号括起来的字符串?

WCF 休息和 Wcf 肥皂服务之间的区别