Json 類別

提供方法,來處理 JavaScript 物件標記法 (JSON) 格式的資料。

System.Object
  System.Web.Helpers.Json

命名空間:  System.Web.Helpers
組件:  System.Web.Helpers (在 System.Web.Helpers.dll 中)

public static class Json

Json 型別公開下列成員。

  名稱說明
公用方法靜態成員Decode(String)將 JavaScript 物件標記法 (JSON) 格式的資料轉換為資料物件。
公用方法靜態成員Decode(String, Type)將 JavaScript 物件標記法 (JSON) 格式的資料轉換為所指定類型的資料物件。
公用方法靜態成員Decode<T>(String)將 JavaScript 物件標記法 (JSON) 格式的資料轉換為所指定嚴密類型的資料清單。
公用方法靜態成員Encode將資料物件轉換為 JavaScript 物件標記法 (JSON) 格式的字串。
公用方法靜態成員Write將資料物件轉換為 JavaScript 物件標記法 (JSON) 格式的字串,並將字串新增至指定的 TextWriter 物件。
上層

此類別代表協助程式,這個協助程式簡化 ASP.NET Web Pages 中網頁程式設計的元件。您可以使用 Json 類別來編碼或解碼 JSON 格式的資料。

HTTP 需要將結構化資料轉換或「序列化」為不同程序可跨 Web 讀取的格式。常用序列化格式是 JSON 和 XML,兩者都是文字型格式。JSON 格式的一般使用是從資料庫、Web 服務或其他來源抓取資料,並將它編碼為 JSON 格式,然後將它傳回給要求瀏覽器,以作為網頁的一部分。

例如,在 ASP.NET Razor 程式碼中使用查詢抓取資料之後,可以呼叫 Encode(Object) 來編碼查詢中的資料,並將結果指派給用戶端程式碼區塊中的 JavaScript 變數。在瀏覽器中,取得含有 JSON 資料的網頁之後,可以使用 JavaScript 程式碼來操作資料在瀏覽器中的顯示方式,而不將其他要求傳送給伺服器。您也可以提供控制項和程式碼,讓使用者更新資料,然後將它張貼至 Web 伺服器。

在 ASP.NET 和 Razor 頁面中,通常會使用 JavaScript 型 jQuery 或 ASP.NET Ajax 程式庫進行用戶端資料操作。這些程式庫提供延伸基礎結構,協助您建置利用 JavaScript 執行用戶端資料操作的頁面,並最大程度地減少與伺服器之間的來回次數。

使用者完成含有資料的頁面的檢視之後,即可送出該頁面。在伺服器端頁面程式碼中,當您接收到張貼的 JSON 資料時,可以使用 Decode(String) 方法,將資料從 JSON 格式轉換為資料物件。然後,您可以使用程式碼 (例如,foreach 迴圈) 處理張貼的資料,以及執行工作 (例如更新資料庫、在頁面上顯示更新的資料,或使用 Web 服務將資料提供給其他要求。

下列範例顯示如何從資料庫抓取資料,並使用 Json 類別編碼該資料,然後在 JavaScript 區塊內將該資料傳送給瀏覽器。此頁面使用 JavaScript,讓使用者可以更新 HTML 表單中的產品名稱,而不向伺服器提出其他要求。使用者送出更新的產品名稱之後,頁面會接收伺服器的程式碼中的已更新 JSON 編碼資料,然後呼叫 Decode(String) 方法,將資料轉譯為物件。之後,會使用 foreach 迴圈建立表格,將更新的資料 (包括使用者已更新的任何產品名稱) 顯示在頁面中。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>JSON Helper</title>
        <script type="text/javascript">
            // This function receives a JSON-encoded string passed by the server, and 
            // then creates a dynamic HTML form that displays the product names in editable fields.
            function WriteData(theData) {
               var i; 
               document.write("<form method='post' name='productsForm' action=''>");
               document.write("<input type='hidden' name='jsonDataField' id='jsonDataField' value='" + JSON.stringify(theData) + "' />");
               for(i in theData) 
                {
                  document.write("<input type='text' name='productName' id='" + theData[i].Id + "' value='" + theData[i].Name + "' /></br>");
                }
                document.write("<input type='submit' id='submit' value='Update Product Names' onclick='UpdateProductNames()' />");
            }

            // After a user updates a product name and clicks the Update button, this function updates 
            // the hidden field value that contains the JSON-encoded data and sends it to the server.
            function UpdateProductNames() {
                var i, x;
                var counter = 0;
                // Create an array of input elements that contain product names.
                var inputElements = document.getElementsByTagName("input");
                var prodNames = [];
                for(i = 0; i < inputElements.length; i++) {
                    if(inputElements[i].name == "productName") {
                        prodNames[counter] = inputElements[i];
                        counter++;
                     }
                 }
                // Use the DOM parse method to convert JSON data to an object, for easier looping.
                var updatedJsonData = JSON.parse(document.getElementById("jsonDataField").value);
                // Add the values from the productName elements to the JSON data.
                for(i in prodNames) {
                    for(x in updatedJsonData) {
                        if(prodNames[i].id == updatedJsonData[x].Id) {
                            updatedJsonData[x].Name = prodNames[i].value;
                            break;
                         }
                     }
                 }
                // After updating the form data with the user's changes, use the DOM stringify method
                // to convert the JSON data back to a JSON-encoded string, for posting to the server.
                document.getElementById("jsonDataField").value = JSON.stringify(updatedJsonData);
                // Submit the updated data to the server.
                document.getElementById("submit").submit();
             }
  </script>
    </head>
    <body>
        @{
          // If this is the initial page request, get the data and add to a form.
          if(!IsPost) {
            var db = Database.Open("bakery");
            var products = db.Query("SELECT * FROM PRODUCTS").ToList();
            // JSON.Encode converts data to a JSON-encoded string, which we can 
            // send to the browser in an HTML form or JavaScript.
            var JsonString = Json.Encode(products);
            <text>
            <script type="text/javascript">
              // Use Html.Raw to pass the JSON-encoded data in literal form to a JavaScript function.
              WriteData(@Html.Raw(JsonString));
            </script> 
            </text>
           } 
           else {
            // If the page is a postback, display the user's updated data in a table.
            <text>
            <h2>JSON-decoded Data Posted by a User</h2>
            <table border="1">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Description</th>
                        <th>Price</th>
                    </tr>
                </thead>
               <tbody> 
                @foreach(var p in Json.Decode(Request["jsonDataField"])) {
                 <tr>
                    <td>@p.Name</td>
                    <td>@p.Description</td>
                    <td>@p.Price</td>
                 </tr>
                 }
                 </tbody>
            </table>
            </text>
            }
        }
    </body>
</html>

這個型別的任何公用 static (在 Visual Basic 中為 Shared) 成員都是執行緒安全的。並不是所有的執行個體成員都保證可以用於所有的執行緒。
顯示: