Значение JavaScriptSerializer для i=3?
JavaScriptSerializer oSerializer = new JavaScriptSerializer();
object i = 3;
string sJSON = oSerializer.Serialize(i); //"3"
JavaScriptSerializer
должен сериализовать свой параметр в JSON!
И результат "3" (который не является JSON)
Что мне не хватает?
редактировать
Я написал письмо Дугласу Крокфорду
3 - это не объект / текст json, а значение json.
поэтому я думаю, что MSDN должен уточнить метод сериализации.
2 ответа
Как уже много раз говорили разные люди, вывод, который вы получаете, является действительным JSON.
Из спецификации JSON (введение):
JSON может представлять четыре примитивных типа (строки, числа, логические значения и нуль) и два структурированных типа (объекты и массивы).
и далее (раздел 2.1):
Значение JSON ДОЛЖНО быть объектом, массивом, числом или строкой или одним из следующих трех литеральных имен:
ложь ноль истина
Моя интерпретация спецификации говорит мне, что описанный здесь случай - это скорее значение JSON, чем объект JSON.
Вы попросили его сериализовать значение 3, и это произошло. Это точно правильно.
Чтобы быть явным: что именно вы ожидаете выйти? JSON дает пары имя-значение. Значение "3" не имеет имени, потому что весь объект равен 3.
JSON - это нотация объектов JavaScript. Передайте ему объект, и вы, вероятно, получите то, что ожидали.
Вы можете использовать анонимный тип, как предполагает М. Бэбкок: new { i = 3 }
,