2010-10-14 14 views
0

J'ai une opération côté serveur générant manuellement une réponse json. Dans le json est une propriété qui contient une valeur de chaîne.chaîne d'échappement pour json résultat dans l'opération côté serveur asp.net

Quelle est la manière la plus simple d'échapper la valeur de chaîne contenue dans ce résultat json?

Donc, ce

string result = "{ \"propName\" : '" + (" *** \\\"Hello World!\\\" ***") + "' }"; 

se transformerait en

string result = "{ \"propName\" : '" + SomeJsonConverter.EscapeString(" *** \\\"Hello World!\\\" ***") + "' }"; 

et entraîner la JSON suivante

{ \"propName\" : '*** \"Hello World!\" ***' } 

Répondre

1

Tout d'abord, je trouve l'idée de mettre en œuvre la sérialisation manuellement pas bon. Vous devriez faire ceci plus seulement pour étudier le but ou de vous avez une autre raison très importante pourquoi vous ne pouvez pas employer des classes .NET standard (par exemple utiliser devez utiliser .NET 1.0-3.0 et pas plus haut).

Maintenant de retour à votre code. Les résultats que vous produisez actuellement ne sont pas au format JSON. Vous devez placer le nom de la propriété et de la valeur de la propriété à deux quotas:

{ "propName" : "*** \"Hello World!\" ***" } 

Comment vous pouvez lire sur http://www.json.org/ double quota caractère non seulement qui doit être échappé. Le caractère barre oblique inverse également doit être être échappé. Vous pouvez vérifier les résultats JSON sur http://www.jsonlint.com/.

Si vous implémentez désérialisation aussi vous devez manuellement savoir qu'il ya plus de caractères qui peuvent être échappées abbitionally à \" et \\: \/, \ b, \ f, \ n, \ r \ t et \ u qui suit à 4 chiffres hexadécimaux. Comme je l'ai écrit au début de ma réponse, il est préférable d'utiliser des classes .NET standard comme DataContractJsonSerializer ou JavaScriptSerializer. Si vous devez utiliser .NET 2.0 et non plus haut, vous pouvez utiliser Json.NET.

+0

Merci pour la réponse. Je dois juste aller avec la sérialisation intégrée. Raison de ne pas le faire initialement était la quantité de code supplémentaire à mettre en œuvre et semblait être exagéré à l'époque. La concaténation de chaînes (dans ce cas) était la plus simple et la moins fructueuse à faire initialement. Note: J'ai édité la question en fonction de vos commentaires sur les noms de propriété (bon point) –

+0

Dans votre réponse, le lien vers JavaScriptSerializer ne fonctionne pas –

+0

@Jason Jarrett: Merci, le lien est corrigé. – Oleg

0

Vous pouvez essayer quelque chose comme:

string.replace(/(\\|")/g, "\\$1").replace("\n", "\\n").replace("\r", "\\r");