我正在编写我所称的POJ(Plain Old JSON)WCF Web服务 - 一个接收和发出标准JSON的服务,没有ASP.NET Ajax喜欢添加的垃圾。
似乎有三个步骤可以实现这一目标:
这对我来说一切正常 - 我可以传入,并且返回了非常简单的JSON。
如果我删除了WebInvoke属性,那么我会返回XML,因此它肯定正在做它应该做的事情。但令我感到奇怪的是,指定JSON输出的选项出现在这里,而不是在配置文件中。假设我想将我的方法公开为XML端点 - 我该怎么做?目前我能看到的唯一方法是使用第二种方法完成相同的操作,但没有指定WebMethodFormat.Json。然后冲洗并重复我服务中的每种方法?呸。
指定输出应该在属性中被序列化为JSON似乎完全违背WCF的原理,其中实现服务是一种传输和编码不可知的方式,留下了如何移动数据的令人讨厌的细节到配置文件。
有没有更好的方法来做我想做的事情?或者我们是否坚持这个尴尬的属性?或者我不够深入了解WCF?
答案 0 :(得分:6)
我还没有完全测试过这个,但是,我看了一下反射器中的WebMessageFormat以及它在代码中使用的位置。
webHttp元素的属性名为defaultOutgoingResponseFormat,可以设置为“Json”或“Xml”。
<behaviors>
<endpointBehaviors>
<behavior name="ServicesJSONEndpointBehavior">
<webHttp defaultOutgoingResponseFormat="Json"/>
</behavior>
</behaviors>
我遇到了同样的问题,通常在没有太多信息的情况下在线搜索后进行了解决方案。
我会用多个配置的endpointBehaviors给它一个镜头并报告回来。
更新6/5/2011
仅供参考 - 我已经抛弃了香草WCF,其所有的发型方案都应该是简单,有利于ServiceStack(http://servicestack.net/)。如果您希望通过HTTP整合标准的REST风格/面向文档的服务,开箱即用支持JSON / XML / CSV(以及未来的协议缓冲区),并允许您将清洁的MVC放在一起轻松的路线,让ServiceStack看起来很难看。 ServiceStack可以很容易和干净地处理许多事情,由于一些不稳定的配置问题或类似的标准WCF,它总是变成一个主要的PITA。 ServiceStack使用它自己的JSON序列化程序,作为额外的奖励,它比下面的Demis提到的DataContractJsonSerializer和JSON.NET更好。