2010-12-07 4 views
1

J'ai construit une chaîne JSON (pour être postée sur un service web), et j'ai utilisé la classe C# StringBuilder pour cela. Le problème est que lorsque j'insère des guillemets, la classe StringBuilder leur échappe.C# StringBuilder avec des guillemets (forJSON)

Je suis en train de construire la chaîne JSON en tant que tel:

StringBuilder dataJSON= new StringBuilder(); 
dataJSON.Append("{"); 
dataJSON.Append(" " + Convert.ToChar(34) + "data" + Convert.ToChar(34) + ": {"); 
dataJSON.Append(" " + Convert.ToChar(34) + "urls" + Convert.ToChar(34) + ": ["); 
dataJSON.Append(" {" + Convert.ToChar(34) + "url" + Convert.ToChar(34) + ": " + Convert.ToChar(34) + domain + "/" + path[0] + Convert.ToChar(34) + "}"); 
dataJSON.Append(" ,{" + Convert.ToChar(34) + "url" + Convert.ToChar(34) + ": " + Convert.ToChar(34) + domain + "/" + path[1] + Convert.ToChar(34) + "}"); 
dataJSON.Append(" ]"); 
dataJSON.Append(" }"); 
dataJSON.Append("}"); 

Cependant, la commande: dataJSON.ToString(); résultats dans la chaîne:

{ \"data\": { \"urls\": [ {\"url\": \"domain/test1.html\"} , {\"url\": \"domain/test2.html\"} ] }} 

Notez les guillemets échappées? Cela me gâche vraiment, parce que le serveur ne peut pas gérer les barres obliques.

Mon désiré (qui affiche bien à mon serveur quand j'utilise PHP) devrait être:

{ "data": { "urls": [ {"url": "domain/test1.html"} , {"url": "domain/test2.html"} ] }} 

Est-il possible d'obtenir une chaîne en C# pour inclure des citations qui résulteront dans la chaîne désirée ?

Merci beaucoup! Brett

+1

Où les voyez-vous? Dans le débogueur? – CodingGorilla

+0

Oui, dans la fenêtre intermédiaire. Est-ce que ceci pourrait être le problème? Est-ce que la fenêtre intermédiaire ajouterait les barres obliques? – Brett

+1

Ce n'est pas ce qui est vraiment retourné – hunter

Répondre

5

La fenêtre Espion/Watch ajouter le \ supplémentaire dans Si vous affichez dans le texte Visualizer, vous ne verrez pas les.

Espion:

"{ \"data\": { \"urls\": [ {\"url\": \"domain/path1\"} ,{\"url\": 
    \"domain/path2\"} ] }}" 

Visualizer (la sortie réelle):

{ "data": { "urls": [ {"url": "domain/path1"} ,{"url": "domain/path2"} ] }} 

Le \ indique que les citations ont été échappé et seront inclus dans la chaîne finale que vous les attendez d'être. C'est à dire. il n'y a rien de mal avec votre sortie.

NB. J'ai utilisé "\"" au lieu de Convert.ToChar(34) quand j'ai testé cela.

3

Vous pouvez avoir plus de chance en utilisant le Newtonsoft.JSON library, ou alternativement simplement échapper à la même barres obliques comme \ » dans votre chaîne littéraux au lieu d'utiliser Char (34).

dataJSON.Append(" \"data\": {");