Sto cercando di utilizzare il pacchetto nuget NETFx Json.NET MediaTypeFormatter per sostituire il DataContractJsonSerializer predefinito nel mio servizio REST WCF (framework 4.0). Ho scaricato il pacchetto nel mio progetto e aggiunto le seguenti righe di codice nel file Global.asax.
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)); }
Ma quando eseguo il servizio utilizza ancora DataContractJsonSerilizer per la serializzazione. Di seguito è riportata la class di ritorno dal mio servizio.
[DataContract] public class SampleItem { [DataMember] public int Id { get; set; } [DataMember] public string StringValue { get; set; } [DataMember] public DateTime DateTime { get; set; } }
Di seguito è riportata la risposta del servizio in Fiddler.
Puoi vedere che DateTime non è nel formato ISO che ho specificato in serializerSettings nel codice sopra. Questo mi dice che il serializzatore JSON.NET non è usato per serializzare gli oggetti.
Gradirei qualsiasi aiuto.
Mi sento stupido dopo aver capito la risposta. Succede a volte :). Ho dovuto aggiungere la configurazione al RouteTable. Di seguito è riportato il codice in 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))); } }
Spero che possa aiutare qualcuno se capitasse di imbattersi nello stesso scenario.