使用JSON.net作为ASP.NET服务的默认序列化程序和反序列化程序(.svc)

时间:2012-03-07 02:31:21

标签: asp.net json web-services json.net svc

我一直在寻找几个小时无济于事。

我正在尝试使用JSON.net作为ASP.NET网站上WCF Web服务(.svc)的默认序列化程序和反序列化程序。需要说明的是,这不是MVC网站。只是在IIS 7中托管的普通旧ASP.NET 4.0。

我最初的动机是使用JSON.net的高级日期处理,但现在我只想知道是否可以完成。

下面是一个简单的网络服务,可以返回日期或获取日期。使用jQuery ajax从页面调用此服务。

我想要做的是以某种方式将ASP.NET配置为始终使用JSON.net de / serialization例程而不是内置的DataContractJsonSerializer或实际调用的任何内容。我知道我可以传递并将字符串返回到我的服务方法,手动处理序列化,但是如果可能的话我想避免这种情况。

就我所知,这可能是不可能的,因为.svc内化了序列化例程。这也是一个可以接受的答案。

谢谢!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using System.Text;
[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    DateTime GetDateTime();

    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    void SendDate(DateTime dt);
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.Text;
using AutoMapper;
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service : IService
{
    public DateTime GetDateTime()
    {
        DateTime dt = new DateTime(2012, 01, 02, 03, 04, 05);
        return dt;
    }

    public void SendDate(DateTime dt)
    {
        DateTime d = dt;
        //Do something with the date
    }
}

Service.svc
<%@ ServiceHost Language="C#" Debug="true" Service="Service" CodeBehind="~/App_Code/Service.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

Web.config relevant lines:
<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
  </system.serviceModel>

0 个答案:

没有答案