为什么我的JSON中没有添加花括号?

时间:2017-09-21 07:53:11

标签: c# json serialization json.net

为什么以下代码不会在json的值周围输出大括号?我认为JSON总是封装在括号内。

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

生成的JSON现在是"\"some text into json\""而不是{ "\"some text into json\"" }

2 个答案:

答案 0 :(得分:5)

这是因为你只是序列化了一个字符串。因此序列化程序只返回序列化的字符串,在JSON中,它只是用引号括起来的字符串:

"some text"

如果序列化对象,JSON只会添加大括号:

{
    "someStringProperty": "some text"
}

另请注意,输出中的反斜杠来自Visual Studio,它再次将整个字符串封装在引号中,并且还会转义字符串中的引号。 "真实"序列化字符串的值只使用简单的引号。因此,Visual Studio将显示以上JSON字符串,如下所示:

"\"some text\""

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

答案 1 :(得分:0)

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

这就是为什么花括号不是必需的,然后需要它们来表示复杂的对象结构。 { "some text into json" }(我省略引用转义以澄清)只是JavaScript编译器的简单语法错误!您可以拥有{ "key": "value", "other key": "other value" }个对象,但没有值的键是错误。

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