JavaScriptSerializer.Deserialize 方法

定義

多載

名稱 Description
Deserialize(String, Type)

將 JSON 格式的字串轉換為指定類型的物件。

Deserialize<T>(String)

將指定的 JSON 字串轉換為型別 T為 的物件。

Deserialize(String, Type)

將 JSON 格式的字串轉換為指定類型的物件。

public:
 System::Object ^ Deserialize(System::String ^ input, Type ^ targetType);
public object Deserialize(string input, Type targetType);
member this.Deserialize : string * Type -> obj
Public Function Deserialize (input As String, targetType As Type) As Object

參數

input
String

用來反序列化的 JSON 字串。

targetType
Type

產生的物件類型。

傳回

去序列化的物件。

例外狀況

inputnull

input 長度超過了的 MaxJsonLength值。

-或-

遞迴極限 RecursionLimit 被超越。

-或-

input 包含一個意想不到的字元序列。

-或-

input 是字典類型,且遇到非字串的鍵值。

-或-

input 包含目標類型中無法提供的成員定義。

input 包含一個「__type」屬性,表示自訂型別,但目前與序列化器相關聯的型別解析器找不到對應的受管理型別。

-或-

input 包含一個「__type」屬性,表示自訂型別,但反序列化對應的 JSON 字串結果無法被指派到預期的目標型別。

-或-

input 包含一個「__type」屬性,表示 Object 非可描述型態(例如抽象型態或介面型態)。

-或-

曾嘗試將 JSON 陣列轉換成不支援用作 JSON 反序列化目標的陣列式受管理型態。

-或-

無法轉換為 input 目標類型。

備註

此反序列化方法不會像該 Deserialize 方法那樣嘗試將物件圖的根映射為特定型別。

適用於

Deserialize<T>(String)

將指定的 JSON 字串轉換為型別 T為 的物件。

public:
generic <typename T>
 T Deserialize(System::String ^ input);
public T Deserialize<T>(string input);
member this.Deserialize : string -> 'T
Public Function Deserialize(Of T) (input As String) As T

類型參數

T

產生的物件類型。

參數

input
String

要反序列化的 JSON 字串。

傳回

T

去序列化的物件。

例外狀況

長度 input 超過了 的 MaxJsonLength值。

-或-

遞迴極限 RecursionLimit 被超越。

-或-

input 包含一個意想不到的字元序列。

-或-

input 是字典類型,且遇到非字串的鍵值。

-或-

input 包含類型中無法取得 T的成員定義。

inputnull

input 包含一個「__type」屬性,表示自訂型別,但與序列化器相關的型別解析器找不到對應的受管理型別。

-或-

input 包含一個「__type」屬性,表示自訂型別,但反序列化對應的 JSON 字串結果無法被指派到預期的目標型別。

-或-

input 包含一個「__type」屬性,表示 Object 非可 或 的型別(例如抽象型別或介面)。

-或-

曾嘗試將 JSON 陣列轉換成不支援用作 JSON 反序列化目標的陣列式受管理型態。

-或-

無法轉換為 inputT

範例

以下範例簡單說明如何序列化與反序列化資料物件。

using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.Script.Serialization;

namespace ExampleApplication
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var RegisteredUsers = new List<Person>();
            RegisteredUsers.Add(new Person() { PersonID = 1, Name = "Bryon Hetrick", Registered = true });
            RegisteredUsers.Add(new Person() { PersonID = 2, Name = "Nicole Wilcox", Registered = true });
            RegisteredUsers.Add(new Person() { PersonID = 3, Name = "Adrian Martinson", Registered = false });
            RegisteredUsers.Add(new Person() { PersonID = 4, Name = "Nora Osborn", Registered = false });

            var serializer = new JavaScriptSerializer();
            var serializedResult = serializer.Serialize(RegisteredUsers);
            // Produces string value of:
            // [
            //     {"PersonID":1,"Name":"Bryon Hetrick","Registered":true},
            //     {"PersonID":2,"Name":"Nicole Wilcox","Registered":true},
            //     {"PersonID":3,"Name":"Adrian Martinson","Registered":false},
            //     {"PersonID":4,"Name":"Nora Osborn","Registered":false}
            // ]

            var deserializedResult = serializer.Deserialize<List<Person>>(serializedResult);
            // Produces List with 4 Person objects
        }
    }
}
Imports System.Web.Script.Serialization

Public Class _Default
    Inherits Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        Dim RegisteredUsers As New List(Of Person)()
        RegisteredUsers.Add(New Person With {.PersonID = 1, .Name = "Bryon Hetrick", .Registered = True})
        RegisteredUsers.Add(New Person With {.PersonID = 2, .Name = "Nicole Wilcox", .Registered = True})
        RegisteredUsers.Add(New Person With {.PersonID = 3, .Name = "Adrian Martinson", .Registered = False})
        RegisteredUsers.Add(New Person With {.PersonID = 4, .Name = "Nora Osborn", .Registered = False})

        Dim serializer As New JavaScriptSerializer()
        Dim serializedResult = serializer.Serialize(RegisteredUsers)
        ' Produces string value of:
        ' [
        '     {"PersonID":1,"Name":"Bryon Hetrick","Registered":true},
        '     {"PersonID":2,"Name":"Nicole Wilcox","Registered":true},
        '     {"PersonID":3,"Name":"Adrian Martinson","Registered":false},
        '     {"PersonID":4,"Name":"Nora Osborn","Registered":false}
        ' ]

        Dim deserializedResult = serializer.Deserialize(Of List(Of Person))(serializedResult)
        ' Produces List with 4 Person objects
    End Sub
End Class

它需要一個名為 Person的類別,以下範例中顯示。

namespace ExampleApplication
{
    public class Person
    {
        public int PersonID { get; set; }
        public string Name { get; set; }
        public bool Registered { get; set; }
    }
}
Public Class Person
    Public Property PersonID As Integer
    Public Property Name As String
    Public Property Registered As Boolean
End Class

備註

Deserialize 方法等同於先用該 DeserializeObject 方法取得物件圖,然後嘗試將結果鑄造為型別 T

在反序列化過程中,會參考序列化器目前的型別解析器,以決定在轉換巢狀元素時所使用的管理型別。 因此,反序列化過程會遍歷所有巢狀元素。input 欲了解更多類型解析器的資訊,請參閱該 JavaScriptTypeResolver 類別。

適用於