¿Es posible anular el comportamiento predeterminado de WCF DataContractSerializer cuando Serialize/DeSerialize entidades y usar JSON.NET en su lugar?Cómo configurar Json.Net como el serializador predeterminado para el servicio WCF REST
Tengo el siguiente contrato de servicio para manejar la entidad de la ciudad. Por motivos de diseño, la entidad de la ciudad tiene IsReference = true y, por lo tanto, el DataContractSerializer predeterminado genera errores.
Para los métodos "GET" puedo manejar la situación con JsonConvert.DeserializeObject, pero con los métodos "PUT, POST, DELETE" DataContractSerializer tiene prioridad y falla al quejarse por las entidades IsReference no se pueden serializar.
He encontrado este Post para implementar IOperationBehavior y proporcionar mi propio serializador pero no sé cómo integrar Json.NET con esto. y creo que debería haber un enfoque más directo para esto.
Agradecería cualquier ayuda u orientación con respecto a este escenario, o consejos para otros enfoques.
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class CityService
{
[Description("Get all Cities")]
[WebGet(UriTemplate = "")]
public Message Cities()
{
}
[Description("Allows the details of a single City to be updated.")]
[WebInvoke(UriTemplate = "{code}", Method = "PUT")]
public Message UpdateCity(string code, City city)
{
}
}
Muchas gracias
Hossam
Oleg, muchas gracias, funciona como un encanto al devolver el tipo de Stream, detiene el serializador de Microsoft. Conozco DataContractSerializerOperationBehavior, pero me lleva a instalar mi propio serializador de XmlObjectSerializer, que no es una tarea fácil. Su propuesta es mucho más simple y directa, gracias una vez más. – Hossam
¿Cómo maneja eso la deserialización del objeto City entrante? –
@Christopher Stott: consulte, por ejemplo, http://msdn.microsoft.com/en-us/library/ms734675.aspx, comenzando con "Leer mensajes". – Oleg