天天看點

如何在ASP.NET中用C#将XML轉換成JSON

本文旨在介紹如果通過C#将擷取到的XML文檔轉換成對應的JSON格式字元串,然後将其輸出到頁面前端,以供JavaScript代碼解析使用。 或許你可以直接利用JavaScript代碼通過Ajax的方式來讀取XML,然後直接對其中的内容進行解析,這樣或許更直接一些。但本文中給出的代碼旨 在說明如何通過原生的C#代碼來完成這一轉換。除此之外,你仍然可以借用一些第三方類庫或者更進階一些的.NET庫對象來實施轉換。我們來看看這裡介紹的 一些較為簡單的方法,但前提是你必須擁有可支援的類庫和對象以備使用。

使用Json.NET類庫

  下面是一個例子:

如何在ASP.NET中用C#将XML轉換成JSON
如何在ASP.NET中用C#将XML轉換成JSON

  首先需要確定你的工程或伺服器支援.NET 4.0或以上版本的Framework,否則無法找到該類。

如何在ASP.NET中用C#将XML轉換成JSON
如何在ASP.NET中用C#将XML轉換成JSON

  其輸出結果為:<code>{"key1":"True","key2":"Hello World","key3":"999"}</code>

  可能還會有更多的方法,這裡不一一列出了。那麼如何使用原生的C#代碼将XML轉換成JSON格式字元串呢?或者說該C#代碼在較低版本的.NET Framework中也可以運作呢?來看看下面的介紹吧。

Introduction

  基于AJAX的頁面使用XmlHttpRequest對象從服務端接收資料來響應使用者的請求,當傳回的資料是XML格式時,它可以被轉換為JSON格式的字元串進而通過JavaScript更加容易地對資料進行處理。

  許多應用程式都将資料存儲為XML的格式,而且會将資料以JSON的格式發送到用戶端以做進一步處理。要實作這一點,它們必須将XML格式轉換為JSON格式。下面的ASP.NET C#代碼實作了這一過程。

Code Description

  代碼中提供了一個方法XmlToJSON,可以用來将XmlDocument對象轉換為JSON字元串。代碼通過疊代每一個XML節點、屬性以及子節點,來建立對應的JSON對象。

代碼不會生成數字和布爾類型的值

Xml DocumentElement對象始終會被轉換為JSON對象的member:object,它遵循下面這些規則。

節點的屬性會被對應地轉換為JSON對象的成員"attr_name":"attr_value"。如:

XML

JSON

&lt;xx yy='nn'&gt;&lt;/xx&gt;

{ "xx" : { "yy" : "nn" } }

&lt;xx yy=''&gt;&lt;/xx&gt;

{ "xx" : { "yy" : "" } }

沒有子節點、屬性和内容的節點被轉換為成員"child_name":null

&lt;xx/&gt;

{ "xx" : null }

沒有子節點和屬性,但是有内容的節點被轉換為成員"child_name":"child_text"

&lt;xx&gt;yyy&lt;/xx&gt;

{ "xx" : "yyy" }

其它節點和屬性會被适當地轉換為"child_name":對象或者"child_name":[elements]對象數組,節點的值會被轉換為對象成員的"value",如:

&lt;xx yy='nn'&gt;&lt;mm&gt;zzz&lt;/mm&gt;&lt;/xx&gt;

{ "xx" : { "yy" : "nn", "mm" : "zzz" } }

&lt;xx yy='nn'&gt;&lt;mm&gt;zzz&lt;/mm&gt;&lt;mm&gt;aaa&lt;/mm&gt;&lt;/xx&gt;

{ "xx" : { "yy" : "nn", "mm" : [ "zzz", "aaa" ] } }

&lt;xx&gt;&lt;mm&gt;zzz&lt;/mm&gt;some text&lt;/xx&gt;

{ "xx" : { "mm" : "zzz", "value" : "some text" } }

&lt;xx value='yyy'&gt;some text&lt;mm&gt;zzz&lt;/mm&gt;more text&lt;/xx&gt;

{ "xx" : { "mm" : "zzz", "value" : [ "yyy", "some text", "more text" ] } }

字元會被安全地轉換為JSON字元串。注意該轉換不會保證你的JavaScript代碼不會受到任何注入攻擊,如果其中的内容來自于一段不安全的XML資料源的話。下面這個例子示範了字元的轉義:

&lt;aa&gt;/z'z''z\yyy&lt;/aa&gt;

{ "aa" : "\/z\u0027z\''z\\yyy" }

  

在某些特殊的環境下,例如下面的代碼,可能需要你自己對反斜線進行轉義。

  注意,在頁面上使用任何未經檢查的XML資料時都會存在安全隐患。

Example

XML輸入:

如何在ASP.NET中用C#将XML轉換成JSON
如何在ASP.NET中用C#将XML轉換成JSON

JSON輸出(對代碼進行了格式化):

如何在ASP.NET中用C#将XML轉換成JSON
如何在ASP.NET中用C#将XML轉換成JSON

  一旦JSON字元串被定義為一個JavaScript對象,如space_DOM,我們便可以在JavaScript代碼中使用下面這些對象和屬性:

space_DOM.space.name

space_DOM.space.frame.length

space_DOM.space.frame[0].text.string

space_DOM.space.frame[0].rule[0].type

  你的JavaScript代碼應該可以非常靈活地應對各種情況,如成員不存在、成員隻包含value、或成員是一個數組。下面這個函數可以将所有的成員轉換成一個數組,進而應對各種不同的情況。

如何在ASP.NET中用C#将XML轉換成JSON
如何在ASP.NET中用C#将XML轉換成JSON

XmlToJSON C# code

  下面給出對應的C#源代碼,通過傳入的XmlDocument對象将其轉換為對應的JSON格式字元串。

如何在ASP.NET中用C#将XML轉換成JSON
如何在ASP.NET中用C#将XML轉換成JSON

Using XmlToJSON

  下面的代碼示範了如何在ASP.NET 2的頁面中使用XmlToJSON()方法。頁面上使用了ClientScriptManager對象來作為JavaScript代碼的容器。當然,你完全可以使用其它任何方式将所轉換的JSON字元串放到前端頁面上。通過下面的代碼,程式在前端頁面上調用一個名為space_processJSON的JavaScript函數,并将JSON字元串作為參數傳遞給它。

如何在ASP.NET中用C#将XML轉換成JSON
如何在ASP.NET中用C#将XML轉換成JSON

  來看看前端頁面上定義的這個JavaScript函數的具體内容。

如何在ASP.NET中用C#将XML轉換成JSON
如何在ASP.NET中用C#将XML轉換成JSON

繼續閱讀