Можно ли переопределить поведение WCF DataContractSerializer по умолчанию, когда Serialize/DeSerialize сущности и вместо этого использовать JSON.NET?Как установить Json.Net в качестве сериализатора по умолчанию для службы REST WCF
У меня есть следующий контракт на обслуживание объекта City. По соображениям дизайна объект City имеет IsReference = true, и поэтому по умолчанию DataContractSerializer вызывает ошибки.
Для методов «GET» я могу справиться с ситуацией с помощью JsonConvert.DeserializeObject, но с методами «PUT, POST, DELETE» DataContractSerializer имеет приоритет и терпит неудачу, поскольку объекты IsReference не могут быть сериализованы.
Я нашел это Post для реализации IOperationBehavior и предоставления собственного Serializer, но я не знаю, как интегрировать Json.NET с этим. и я считаю, что для этого должен быть более прямой подход.
Буду признателен за любую помощь или руководство в отношении этого сценария или рекомендации другим подходам.
[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)
{
}
}
Большое спасибо
Hossam
Олег, большое спасибо, он работает как шарм, возвращая тип Stream, он останавливает сериализатор Microsft. Мне известно о DataContractSerializerOperationBehavior, но мне требуется, чтобы мой собственный сериализатор из XmlObjectSerializer был непростой задачей. Ваше предложение намного проще и прямо, спасибо еще раз. – Hossam
Как это десериализует входящий объект City? –
@ Кристофер Стотт: Смотрите, например, http://msdn.microsoft.com/en-us/library/ms734675.aspx, начиная с «Чтения сообщений». – Oleg