2017-09-21 56 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。

相關問題