Czy możliwe jest zastąpienie domyślnego zachowania WCF DataContractSerializer podczas tworzenia szeregów/DeSerialize i używania JSON.NET zamiast?Jak ustawić Json.Net jako domyślny serializer dla usługi WCF REST
Mam następującą umowę serwisową na obsługę podmiotu City. Ze względów projektowych jednostka City ma wartość IsReference = true, dlatego domyślny obiekt DataContractSerializer powoduje błędy.
Dla metod "GET" mogę obsłużyć sytuację z JsonConvert.DeserializeObject, ale z metodami "PUT, POST, DELETE" DataContractSerializer ma pierwszeństwo i nie może narzekać, że podmioty IsReference nie mogą być serializowane.
Mam znaleźć Post do wdrożenia IOperationBehavior i zapewnić mój własny Serializer ale nie wiem jak zintegrować Json.NET z tym. i uważam, że powinno to być bardziej proste podejście.
Doceniam każdą pomoc lub wskazówki dotyczące tego scenariusza lub porady dotyczące innych metod.
[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)
{
}
}
Dziękujemy
Hossam
Oleg, wielkie dzięki, działa jak czar, zwracając typ Stream, zatrzymuje serializer Microsft. Jestem świadomy DataContractSerializerOperationBehavior, ale zabiera mi to mój własny Serializer z XmlObjectSerializer, co nie jest zadaniem łatwym. Twoja propozycja jest znacznie prostsza i prosta, jeszcze raz dziękuję. – Hossam
W jaki sposób obsługuje deserializację przychodzącego obiektu City? –
@ Christopher Stott: Zobacz na przykład http://msdn.microsoft.com/en-us/library/ms734675.aspx, począwszy od "Reading Messages". – Oleg