2017-09-21 55 views
1

为什么下面的代码不输出周围的json值大括号?我认为JSON始终封装在括号内。为什么没有花括号添加到我的JSON中?

var json = JsonConvert.SerializeObject("some text into json", Formatting.Indented);` 

产生的JSON现在0​​而非{ "\"some text into json\"" }

+0

为什么downvotes?这是一个基本的,但非常明确的问题! – Spontifixus

+0

如果没有评论,评论会给我一个改善问题的机会,这是怎么回事?这个问题故意非常简单,因为我没有理由让它膨胀。 –

+0

猜测这可能是@Filburt的一个原因,将其更改为代码。 –

回答

5

这是因为你根本序列化的字符串。因此,串行器仅返回序列化的字符串,这在JSON,只是用引号括起来的字符串:

"some text" 

JSON只有当你序列化一个对象增加了大括号:

{ 
    "someStringProperty": "some text" 
} 

还要注意, Visual Studio的输出结果中的反斜杠将整个字符串再次封装在引号中,并且也会在字符串中转义引号。序列化字符串的“真实”值只使用简单的引号。因此如下的Visual Studio将显示上述JSON字符串:

"\"some text\"" 

"{ \"someStringProperty\": \"some text\" }" 
0

JSON代表“JavaScript对象表示法”,这意味着所有的数据被表示为一个单一的JavaScript对象(一个字符串看起来像对象的JavaScript代码,更正确)。

这就是为什么大括号不是强制性的,他们表示复杂的对象结构需要那么必要。 { "some text into json" }(我忽略了clariness的引号转义)对于JavaScript编译器来说只是简单的语法错误!你可以有{ "key": "value", "other key": "other value" }对象,但没有值的键是错误的。

所以"some text into json"是字符串对象"some text into json"唯一可能的正确JSON。

相关问题