JavaScriptSerializer.Deserialize 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| Deserialize(String, Type) |
將 JSON 格式的字串轉換為指定類型的物件。 |
| Deserialize<T>(String) |
將指定的 JSON 字串轉換為型別 |
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
產生的物件類型。
傳回
去序列化的物件。
例外狀況
input 是 null。
的 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 字串。
傳回
去序列化的物件。
例外狀況
長度 input 超過了 的 MaxJsonLength值。
-或-
遞迴極限 RecursionLimit 被超越。
-或-
input 包含一個意想不到的字元序列。
-或-
input 是字典類型,且遇到非字串的鍵值。
-或-
input 包含類型中無法取得 T的成員定義。
input 是 null。
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 類別。