2012-03-22 26 views
8

मैं अपने डब्ल्यूसीएफ आरईएसटी सेवा (4.0 ढांचे) में डिफ़ॉल्ट डेटाकंट्रैक्टजसनसेरियलज़र को स्वैप करने के लिए NETFx Json.NET MediaTypeFormatter nuget पैकेज का उपयोग करने की कोशिश कर रहा हूं। मैंने अपने प्रोजेक्ट में पैकेज डाउनलोड किया और ग्लोबल.एएसएक्स फ़ाइल में कोड की निम्नलिखित पंक्तियां जोड़ दीं।डब्ल्यूसीएफ आरईएसटी सेवाओं के लिए JSON.NET Serializer

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; } 
} 

नीचे फ़िडलर में सेवा से प्रतिक्रिया है।

enter image description here

आप देख सकते हैं कि दिनांक समय आईएसओ प्रारूप है जो मैं ऊपर कोड में serializerSettings में निर्दिष्ट किया है में नहीं है। यह मुझे बताता है कि जेएसओएन.नेट सीरिएलाइज़र का उपयोग वस्तुओं को क्रमबद्ध करने के लिए नहीं किया जाता है।

किसी भी मदद की सराहना करेंगे।

उत्तर

6

मुझे जवाब मिलने के बाद मुझे गूंगा लगता है। कई बार होता है :)। मुझे रूटटेबल में कॉन्फ़िगरेशन जोड़ना पड़ा। नीचे Global.asax

में कोड
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))); 
    } 
} 

आशा है कि यह किसी को मदद मिलेगी अगर वे एक ही परिदृश्य में चलाने के लिए हो रहा है।

+2

वास्तव में मैं इसी तरह के परिदृश्य के साथ होता हूं, लेकिन मेरी डब्ल्यूसीएफ सेवाओं को विंडोज सेवा में होस्ट किया जाता है। उपर्युक्त कोड निम्नलिखित अपवाद फेंकता है: "System.InvalidOperationException: 'ServiceHostingEnvironment.EnsureServiceAvailable' को वर्तमान होस्टिंग वातावरण में शामिल नहीं किया जा सकता है। इस API को यह आवश्यक है कि कॉलिंग एप्लिकेशन को आईआईएस या WAS में होस्ट किया जाए।" कोई विचार? –