使用json.net MediaTypeFormatter示例的WCF服务

时间:2014-05-26 12:13:27

标签: c# asp.net .net json wcf

问题

是否有最新的示例显示如何在WCF 4.5服务中使用Json.Net序列化程序替换默认的DataContractJsonSerializer?

背景

似乎是一个常见的请求,我想用Json.Net序列化器替换默认的DataContractJsonSerializer。我遇到的第一种方法是由Carlos Figueira here提供的。这确实有效,但正如文章末尾所指出的那样(稍微解释):

  

这不是生产就绪的代码...为一些合同测试它...不能保证它适用于所有场景...为简单起见它没有很多错误处理哪个生产级别代码将...在现有的WCF REST管道中集成任何新格式并不太容易...必须处理格式化程序,消息对象,依赖于内容类型映射器,只是为了能够使用这个不同的序列化程序...即使在所有这些之后...还没有与管道完全集成 - 不支持UriTemplates ......

这一切都让我有点紧张。但最后提到了带有link to an discussion的WCF API,其中包含以下代码行:

var hostConfig = (HttpHostConfiguration) config;
hostConfig.OperationHandlerFactory.Formatters.Insert(0, new NewtonsoftJsonFormatter());

以及如何覆盖格式化程序。问题是我无法在WCF服务中使用它。在包含一堆额外的NuGet包后,格式化程序编译,但我的服务从未被调用。我遇到的每个页面似乎都有不同的配置代码。我尝试了概述hereherehereherehere(列举一些)的方法。有些使用HttpHostConfiguration,有些使用GlobalConfiguration,有些使用OperationHandlerFactory。我认为问题的一部分是许多这些方法都是旧的,来自不同的技术--WCF WEB API,ASP.NET API,ASP.NET MVC。

虽然我可以让格式化程序进行编译,但它永远不会被调用,这让我认为这是一个配置问题。我可以发布一些代码,但我不确定哪个部分不正确。我已经考虑了返回通用Message对象并将每个对象格式化为带有json的Message的方法,但我更愿意只将其作为最后的手段,因为它使得服务的返回类型不太清楚。这让我想到了上面的问题。

0 个答案:

没有答案