.Net 4.0 JSON Serialization: двойные кавычки заменены на \ " - PullRequest
4 голосов
/ 27 февраля 2012

Я использую System.Web.Script.Serialization.JavaScriptSerializer () для сериализации объекта словаря в строку JSON.Мне нужно отправить эту строку JSON в API, сидящий в облаке.Однако, когда мы сериализуем его, сериализатор заменяет все двойные кавычки на \ "

Например -

Ideal json_string = {" k ":" json "," data ":" yeehaw "}

Сериализатор испортил json_string = {\ "k \": \ "json \", \ "data \": \ "yeehaw \"}

Любая идея, почему он это делает? Я также использовал внешние пакеты, такие как json.net, но это все еще не решает проблемы.

Код -

Dictionary<string, string> json_value = new Dictionary<string, string>();
json_value.Add("k", "json");
json_value.Add("data", "yeehaw");
var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string json_string = jsonSerializer.Serialize(json_value);

Ответы [ 3 ]

7 голосов
/ 27 февраля 2012

Я рискну предположить, что вы смотрите в IDE на точку останова.В этом случае здесь нет проблем.То, что вы видите, совершенно верно JSON;просто IDE использует обозначение экранированной строки, чтобы отобразить его для вас.Однако содержимое строки является вашей "идеальной" строкой.Экранированная версия используется по разным причинам:

  • , чтобы вы могли правильно видеть и идентифицировать нетекстовые символы, такие как табуляция, возврат каретки, новая строка и т. Д.
  • , чтобыстроки с множеством новых строк могут отображаться в горизонтальном представлении
  • , чтобы было ясно, что это строка, то есть "foo with \" a quote in" (внешние кавычки сообщают, что это строка; есливнутренняя кавычка не была экранирована, это сбивало бы с толку)
  • , так что вы можете скопировать / вставить значение в редактор или непосредственное окно (и т. д.) без необходимости добавлять экранирование
0 голосов
/ 27 февраля 2012

Вы видите escape-символ

Ваш JSON - String, и если вы хотите, чтобы " в строке, вы должны использовать один из следующих:

string alias = @"My alias is ""Tx3""";

или

string alias = "My alias is \"Tx3\"";

Обновление

Просто чтобы уточнить.Здесь я хотел сказать, что ваш JSON совершенно корректен.Вы видите специальные символы в IDE, и это совершенно нормально, как Jon & Marc указывают в своих ответах и ​​комментариях.Проблема заключается не в этих \ символах.

0 голосов
/ 27 февраля 2012

Убедитесь, что вы не выполняете двойную сериализацию объекта. Это случилось со мной несколько дней назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...