Manière appropriée de gérer le caractère esperluette dans une chaîne JSON envoyée au service Web REST

D’ACCORD,

J’utilise System.Runtime.Serialization et DataContractJsonSerialization .

Le problème est que dans la requête j’envoie une valeur d’une propriété avec le caractère & . Dites, AT&T , et je reçois une réponse avec une erreur: Invalid JSON Data .

Je pensais que l’échappement se ferait à l’intérieur de la bibliothèque, mais je vois maintenant que la sérialisation est laissée intacte dans l’esperluette & personnage.

Oui, pour un format JSON, cela est valide. Mais ce sera un problème pour ma demande POST puisque je dois l’envoyer à un serveur qui, s’il contient une esperluette, répondra avec une erreur, me voici donc.

HttpUtility.HtmlEncode trouve dans la bibliothèque System.Web . Vous Uri.EscapeUriSsortingng utiliser Uri.EscapeUriSsortingng . Je l’ai fait pour essayer, mais de toute façon, et sans cela, toutes les demandes fonctionnent bien, sauf qu’une esperluette est dans une valeur.

EDIT: la classe HttpUtility est transférée dans le SDK de Windows Phone, mais la méthode Uri.EscapeUriSsortingng pour coder une chaîne doit toujours être Uri.EscapeUriSsortingng .

La première idée a été de se salir les mains et de commencer à remplacer le caractère spécial qui poserait un problème sur le serveur, mais je me demande s’il existe une autre solution que je devrais faire: elle serait efficace et «appropriée».

Je devrais dire que j’utilise

 // Convert the ssortingng into a byte array. byte[] postBytes = Encoding.UTF8.GetBytes(data); 

Pour convertir le JSON en byte[] et écrire dans le Stream . Et,

 request.ContentType = "application/x-www-form-urlencoded"; 

En tant que WebRequest.ContentType .

Alors, suis-je foiré pour une raison ou quelque chose me manque?

Je vous remercie.

Le problème était que je codais toute la chaîne de requête, y compris la clé. J’avais une requête data={JSON} et je la formatais, mais la partie {JSON} ne devrait être qu’encodée.

 ssortingng requestData = "data=" + Uri.EncodeDataSsortingng(json) // worked perfect! 

Trou stupide dans lequel entrer.

Avez-vous essayé de remplacer l’esperluette par & pour le POST?