Est-il possible de remplacer le comportement WCF DataContractSerializer par défaut lors de la sérialisation/DeSerialize entités et utiliser JSON.NET à la place?Comment définir Json.Net comme sérialiseur par défaut pour le service REST WCF
J'ai le contrat de service suivant pour gérer l'entité City. Pour des raisons de conception, l'entité City a IsReference = true et, par conséquent, DataContractSerializer par défaut génère des erreurs. Pour les méthodes "GET" je peux gérer la situation avec JsonConvert.DeserializeObject, mais avec les méthodes "PUT, POST, DELETE" DataContractSerializer a priorité et échoue à se plaindre pour les entités IsReference ne peut pas être sérialisé.
J'ai trouvé ce Post pour implémenter IOperationBehavior et fournir mon propre Serializer mais je ne sais pas comment intégrer Json.NET avec ceci. et je crois qu'il devrait y avoir une approche plus directe pour cela.
J'apprécierais n'importe quelle aide ou conseil concernant ce scénario, ou conseil à d'autres approches.
[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)
{
}
}
Un grand merci
Hossam
Oleg, merci beaucoup, ça fonctionne comme un charme en retournant le type Stream, il arrête le sérialiseur Microsft. Je connais DataContractSerializerOperationBehavior, mais il me faut hériter de mon propre sérialiseur de XmlObjectSerializer, ce qui n'est pas une tâche facile. Votre proposition est beaucoup plus simple et directe, merci encore une fois. – Hossam
Comment cela gère-t-il la désérialisation de l'objet City entrant? –
@Christopher Stott: Voir par exemple http://msdn.microsoft.com/en-us/library/ms734675.aspx en commençant par "Reading Messages". – Oleg