Json Выход из класса JavaScriptSerializer? - PullRequest
1 голос
/ 09 декабря 2011

Я использую класс JavaScriptSerializer для сериализации и десерилизации в / в Json.

I know есть библиотека json.net.

Но мой вопрос:

Могу ли я также использовать JavaScriptSerializer класс для экранирования строки json?

или я должен сделать это сам? и если это так, я должен сделать это к encodeURIComponent?

Ответы [ 2 ]

5 голосов
/ 09 декабря 2011

Да, это подходящий способ безопасного кодирования строки . Просто вызовите serialize в вашей строке.

Чтобы быть более понятным, если вы посмотрите на фактическую реализацию JavaScriptSerializer (я использую dotpeek), вы увидите, что он на самом деле вызывает эту функцию:

private static void SerializeString(string input, StringBuilder sb)
{
  sb.Append('"');
  sb.Append(HttpUtility.JavaScriptStringEncode(input));
  sb.Append('"');
}

Так что я думаю, что другой ответ заключается в том, что вы можете просто использовать HttpUtility.JavaScriptStringEncode, хотя он не будет добавлять двойные кавычки вокруг него.

0 голосов
/ 09 декабря 2011

Ответ на ваш вопрос зависит от того, как вы используете JSON.

Если вы отправляете через ajax-вызов, вам, вероятно, не нужно ничего делать со строкой.

Если вы встраиваете полученный json в переменную javascript из codebehind, вам нужно лишь минимальное экранирование, чтобы убедиться, что js правильно отформатирован. Вот что мы используем для этого:

sJsonString = sJsonString.Replace("\r\n", "\\r\\n")

(Извините, это код VB, возможно, потребуется некоторая настройка для C #)

Я думаю, что это может быть соответствующий код C #:

sJsonString = sJsonString.Replace("\\r\\n", "\\\\r\\\\n");
...