Значение 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 },

Другие вопросы по тегам