對(duì)于配置JSON 文本分析器說明
我們已經(jīng)介紹了如何在JSON 文本中、以及通過 Jayrock 在 .NET Framework 中使用 JSON,接下來我們來看一個(gè)關(guān)于在何處以及如何應(yīng)用這些知識(shí)的實(shí)際示例。考慮 ASP.NET 2.0 的客戶端腳本回調(diào)功能。
它可簡(jiǎn)化 web 瀏覽器向 ASP.NET 頁面(或向頁面中的特定控件)發(fā)出帶外調(diào)用的過程。在典型的回調(diào)情形中,瀏覽器中的客戶端腳本將數(shù)據(jù)打包并回送到 web 服務(wù)器,由服務(wù)器端方法進(jìn)行某些處理。從服務(wù)器收到響應(yīng)數(shù)據(jù)后,客戶端會(huì)用它來更新瀏覽器顯示。
以下示例代碼使用 JsonTextReader 類,對(duì)包含七大洲名稱的字符串?dāng)?shù)組的 JSON 文本表示形式進(jìn)行分析。每個(gè)以字母“A”開頭的洲會(huì)發(fā)送到控制臺(tái):注意Jayrock 中的 JsonTextReader 類是一個(gè)非常自由的 JSON 文本分析器。
它實(shí)際上允許的語法要比 RFC 4627 中列出的規(guī)則所規(guī)定的有效 JSON 文本多得多。例如,就象在 JavaScript 中一樣,JsonTextReader 類允許單行和多行注釋出現(xiàn)在 JSON 文本內(nèi)。單行注釋以雙斜杠 (//) 開頭,多行注釋以斜杠星號(hào) (/*) 開頭,并以星號(hào)斜杠 (*/) 結(jié)尾。單行注釋甚至能以井字號(hào) (#) 開頭。
這在 Unix 樣式的配置文件中十分常見。在所有實(shí)例中,分析器會(huì)完全跳過注釋,不會(huì)通過 API 公開。和在 JavaScript 中一樣,JsonTextReader 允許以撇號(hào) (') 分隔 JSON 字符串。該分析器甚至可以容忍最后一個(gè)對(duì)象成員或者數(shù)組元素后面多余的逗號(hào)。#t#
即使具備所有這些附加內(nèi)容,JsonTextReader 仍是符合標(biāo)準(zhǔn)的分析器!而 JsonTextWriter 則只能產(chǎn)生嚴(yán)格符合標(biāo)準(zhǔn)的 JSON 文本。這遵循了通常所說的可靠性原則,即“嚴(yán)以律己,寬以待人”。
要將 JSON 文本直接轉(zhuǎn)換為 .NET 對(duì)象,請(qǐng)使用 JsonConvert 類導(dǎo)入方法,指定輸出類型和 JSON 文本。以下示例顯示了從 JSON 字符串數(shù)組到 .NET 字符串?dāng)?shù)組的轉(zhuǎn)換:
- stringjsonText=@"["Europe","Asia","Australia","Antarctica",
- "NorthAmerica","SouthAmerica","Africa"]";
- using(JsonTextReaderreader=newJsonTextReader(new
- StringReader(jsonText)))
- {
- while(reader.Read())
- {
- if(reader.TokenClass==JsonTokenClass.String&
- reader.Text.StartsWith("A"))
- {
- Console.WriteLine(reader.Text);
- }
- }
- }