Existe-t-il des classes / fonctions disponibles pour une évasion JSON facile? Je préférerais ne pas avoir à écrire le mien.
Réponses
Trop de publicités?Bâtiment sur la réponse par Dejan, ce que vous pouvez faire est d'importer System.Web.Helpers
.NET Framework assemblée, puis utiliser la fonction suivante:
static string EscapeForJson(string s) {
string quoted = System.Web.Helpers.Json.Encode(s)
return quoted.Substring(1, quoted.Length - 2);
}
L' Substring
appel est nécessaire, puisqu' Encode
automatiquement entoure les chaînes entre guillemets.
Oui, ajoutez simplement la fonction suivante à votre classe Utils ou à quelque chose comme ça:
public static string cleanForJSON(string s)
{
if (s == null || s.Length == 0) {
return "";
}
char c = '\0';
int i;
int len = s.Length;
StringBuilder sb = new StringBuilder(len + 4);
String t;
for (i = 0; i < len; i += 1) {
c = s[i];
switch (c) {
case '\\':
case '"':
sb.Append('\\');
sb.Append(c);
break;
case '/':
sb.Append('\\');
sb.Append(c);
break;
case '\b':
sb.Append("\\b");
break;
case '\t':
sb.Append("\\t");
break;
case '\n':
sb.Append("\\n");
break;
case '\f':
sb.Append("\\f");
break;
case '\r':
sb.Append("\\r");
break;
default:
if (c < ' ') {
t = "000" + String.Format("X", c);
sb.Append("\\u" + t.Substring(t.Length - 4));
} else {
sb.Append(c);
}
break;
}
}
return sb.ToString();
}
J'ai utilisé le code suivant pour échapper à la valeur de chaîne pour JSON. Vous devez ajouter votre '"' à la sortie du code suivant:
public static string EscapeStringValue(string value)
{
const char BACK_SLASH = '\\';
const char SLASH = '/';
const char DBL_QUOTE = '"';
var output = new StringBuilder(value.Length);
foreach (char c in value)
{
switch (c)
{
case SLASH:
output.AppendFormat("{0}{1}", BACK_SLASH, SLASH);
break;
case BACK_SLASH:
output.AppendFormat("{0}{0}", BACK_SLASH);
break;
case DBL_QUOTE:
output.AppendFormat("{0}{1}",BACK_SLASH,DBL_QUOTE);
break;
default:
output.Append(c);
break;
}
}
return output.ToString();
}
Vous souhaiterez peut-être consulter Une introduction à JSON dans .Net sur MSDN et la classe JsonConvert de JayRock JSON .
En guise de remarque, nous utilisons Jayrock pour tous nos objectifs Json pour nos produits.
Je vous recommanderais également d'utiliser la bibliothèque JSON.NET mentionnée, mais si vous devez échapper des caractères unicode (par exemple, le format \ uXXXX) dans la chaîne JSON résultante, vous devrez peut-être le faire vous-même. Jetez un coup d'œil à la conversion de chaînes Unicode en chaînes ascii échappées, par exemple.