WCF, envoi de données JSONized

J’ai un type complexe:

[DataContract] public class CustomClass { [DataMember] public ssortingng Foo { get; set; } [DataMember] public int Bar { get; set; } } 

J’ai ensuite un service Web RESTful WCF qui contient ceci:

 [OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/class/save")] bool Save(CustomClass custom); 

donc, côté navigateur, jsonisé mon object CustomClass, il ressemble à ceci:

 var myClass = "{ foo: \"hello\", bar: 2 }"; $.ajax({ contentType: "application/json", data: { custom: myClass }, dataType: "json", success: callback, type: "POST", url: "MyService.svc/class/save" }); 

Je soumets les données avec jquery à l’aide de $ .ajax afin de pouvoir définir manuellement le type de contenu sur “application / json”. Lorsqu’il envoie, le postbody ressemble à

 custom= 

Je reçois l’erreur suivante:

Le serveur a rencontré une erreur lors du traitement de la demande. Le message d’exception est ‘Une erreur s’est produite lors de la vérification de l’élément de démarrage de l’object de type MyAssembly.CustomClass. Caractère inattendu rencontré ‘c’. ‘. Voir les journaux du serveur pour plus de détails. La trace de la stack d’exceptions est la suivante: System.Runtime.Serialization.XmlObjectSerializer.IsStartObjectH.Except (XmlReaderDelegator reader) de System.Runtime.Serialization. à System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRemest (Message message, Object [] parameters) à System message, Paramètres d’object []) à System.ServiceModel.Dispatcher.CompositeDispatchFormatter.DeserializeRequest (Message message, Paramètres d’object) à System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs (MessageRpc & rpc) eBegin (MessageRp & Rp) chez System.ServiceModel.Dispatcher.ImmutableDematchDematch.ProcessMessage5 (MessageRp & Rp) (System.ServiceMd.Core.pd.Eurodore.pd.png). ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & rpc) à System.ServiceModel.Dispatcher.Malitaire

J’ai essayé d’emballer mes données json … J’ai essayé d’utiliser $ .post pour envoyer le message (mais cela ne définit pas le type de contenu sur application / json, donc le service Web ne comprend pas) … des idées?

Le problème est que vous avez échappé correctement à l’object, mais lorsque vous créez un object Json complexe dans la méthode de publication jQuery, vous n’échappez pas wrapper. Donc vous devez soit échapper un object JS entier comme ceci: “{\” custom \ “: \” {foo: \ “hello \”, bar: 2} \ “}” (je n’ai pas essayé cela moi-même, mais devrait fonctionner), ou (probablement la meilleure solution) utiliser JSON.ssortingngify ({custom: myClass})

WCF est vraiment sensible aux objects JSON qu’il reçoit pour la sérialisation.

Donc, le problème que vous rencontrez est une erreur de sérialisation. WCF veut voir le nom des propriétés dans le JSON entouré de “”

Donc, je viens de rencontrer la même erreur où

 data:'{id: 1 }', 

n’a pas fonctionné mais

  data:'{"id": 1 }', 

a travaillé

J’espère que cela aide quelqu’un d’autre à sortir

Jetez un coup d’œil ici pour trouver une partie de votre réponse: Comment publier un tableau d’objects complexes avec JSON, jQuery sur ASP.NET MVC Controller?