2012-03-22 4 views
8

NETFx Json.NET MediaTypeFormatter 너겟 패키지를 사용하여 WCF REST 서비스 (4.0 프레임 워크)에서 기본 DataContractJsonSerializer를 스왑 아웃하려고합니다. 내 프로젝트에서 패키지를 다운로드하고 Global.asax 파일에 다음 코드 줄을 추가했습니다. 나는이 서비스를 실행할 때WCF REST 서비스 용 JSON.NET 시리얼 라이저

void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(); 

     // Create Json.Net formatter serializing DateTime using the ISO 8601 format 
     var serializerSettings = new JsonSerializerSettings(); 
     serializerSettings.Converters.Add(new IsoDateTimeConverter()); 

     var config = HttpHostConfiguration.Create(); 
     config.Configuration.OperationHandlerFactory.Formatters.Clear(); 
     config.Configuration.OperationHandlerFactory.Formatters.Insert(0, new JsonNetMediaTypeFormatter(serializerSettings)); 
    } 

는하지만 여전히 직렬화의 DataContractJsonSerilizer를 사용합니다. 아래는 내 봉사에서 돌아 오는 수업입니다.

[DataContract] 
public class SampleItem 
{ 
    [DataMember] 
    public int Id { get; set; } 

    [DataMember] 
    public string StringValue { get; set; } 

    [DataMember] 
    public DateTime DateTime { get; set; } 
} 

아래는 Fiddler의 서비스 응답입니다.

enter image description here

당신은 날짜 시간 나는 위의 코드에 serializerSettings에서 지정한 ISO 형식이 아닌 것을 알 수 있습니다. 이것은 JSON.NET serializer가 객체 직렬화에 사용되지 않는다는 것을 알려줍니다.

도움을 주시면 감사하겠습니다.

답변

6

내가 대답을 찾은 후에 나는 어리 석다. 때때로 발생합니다 :). 나는 RouteTable에 설정을 추가해야만했다. 다음은

public class Global : HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(); 
    } 

    private void RegisterRoutes() 
    { 
     // Create Json.Net formatter serializing DateTime using the ISO 8601 format 
     var serializerSettings = new JsonSerializerSettings(); 
     serializerSettings.Converters.Add(new IsoDateTimeConverter()); 

     var config = HttpHostConfiguration.Create().Configuration; 
     config.OperationHandlerFactory.Formatters.Clear(); 
     config.OperationHandlerFactory.Formatters.Insert(0, new JsonNetMediaTypeFormatter(serializerSettings)); 

     var httpServiceFactory = new HttpServiceHostFactory 
            { 
             OperationHandlerFactory = config.OperationHandlerFactory, 
             MessageHandlerFactory = config.MessageHandlerFactory 
            }; 

     RouteTable.Routes.Add(new ServiceRoute("Service1", httpServiceFactory, typeof(Service1))); 
    } 
} 

들이 동일한 시나리오로 실행하는 일이 있다면 누군가 도움이 될 것입니다 희망 Global.asax에

의 코드입니다.

+2

실제로 비슷한 시나리오가 발생하지만 내 WCF 서비스는 Windows 서비스에서 호스팅됩니다. 위의 코드는 다음 예외를 throw합니다. "System.InvalidOperationException : 'ServiceHostingEnvironment.EnsureServiceAvailable'을 현재 호스팅 환경에서 호출 할 수 없습니다.이 API를 사용하려면 호출하는 응용 프로그램이 IIS 또는 WAS에서 호스팅되어야합니다." 아이디어가 있으십니까? –