JavaScriptSerializer.Deserialize 方法

定義

多載

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” 屬性,但目前與序列化程式相關聯的類型解析程式找不到對應的 Managed 類型。

-或-

input 包含表示自訂類型的 “__type” 屬性,但還原序列化對應 JSON 字串的結果無法指派給預期的目標類型。

-或-

input 包含 “__type” 屬性,表示 Object 或不可執行個體化的類型 (例如抽象類型或介面)。

-或-

嘗試將 JSON 陣列轉換成陣列式的 Managed 類型,但是不支援使用該類型做為 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" 屬性,但與序列化程式相關聯的類型解析程式找不到對應的 Managed 類型。

-或-

input 包含表示自訂類型的 “__type” 屬性,但還原序列化對應 JSON 字串的結果無法指派給預期的目標類型。

-或-

input 包含 "__type" 屬性,表示 Object 或不可執行個體化的類型 (例如,抽象類型或介面)。

-或-

嘗試將 JSON 陣列轉換成陣列式的 Managed 類型,但是不支援使用該類型做為 JSON 還原序列化目標。

-或-

無法將 input 轉換成 T

範例

下列範例提供如何序列化和還原序列化資料物件的簡單圖例。

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

在還原序列化期間,會參考序列化程式的目前型別解析程式,這會決定在轉換陣列和字典類型內巢狀專案時要使用的 Managed 型別。 因此,還原序列化程式會逐一查看 的所有巢狀專案 input 。 如需類型解析程式的詳細資訊,請參閱 類別 JavaScriptTypeResolver

適用於