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?