Значение JavaScriptSerializer для i = 3? - PullRequest
0 голосов
/ 07 января 2012
JavaScriptSerializer oSerializer = new JavaScriptSerializer();
object i = 3;
string sJSON =  oSerializer.Serialize(i); //"3"

JavaScriptSerializer должен сериализовать свой параметр в JSON!

И результатом будет "3" (что составляет не JSON)

Что такоеЯ пропал?

edit

Я написал письмо Дугласу Крокфорду

3 - это не объект / текст json, а значение json.

, так что я думаюmsdn должен уточнить метод сериализации.

http://i.stack.imgur.com/VOh3X.png

Ответы [ 2 ]

2 голосов
/ 07 января 2012

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

Из спецификации JSON (Введение):

JSON может представлять четыре примитивных типа (строки, числа, логические значения и нуль) и два структурированных типа (объекты и массивы).

и далее (раздел 2.1):

Значение JSON ДОЛЖНО быть объектом, массивом, числом или строкой или одним из следующих трех литеральных имен:

false null true

Моя интерпретация спецификации говорит мне, что описанный вами случай - это скорее JSON значение , чем JSON объект .

1 голос
/ 07 января 2012

Вы попросили его сериализовать значение 3, и это произошло.Это совершенно правильно.

Если говорить прямо: что именно вы ожидаете выйти?JSON дает пары имя-значение.У значения «3» нет имени, потому что весь объект равен 3.

JSON - это JavaScript object нотация.Передайте ему объект, и вы, вероятно, получите то, что ожидаете.

Вы можете использовать анонимный тип, как предлагает М. Бэбкок: new { i = 3 }.

...