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”属性,但是当前与序列化程序关联的类型解析程序找不到相应的托管类型。

- 或 -

input 包含指示自定义类型的“__type”属性,但是反序列化相应 JSON 字符串的结果无法分配给所需的目标类型。

- 或 -

input 包含指示 Object 或不可实例化的类型(例如,抽象类型或接口)的“__type”属性。

- 或 -

尝试将 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 包含指示 Object 或不可实例化的类型(例如,抽象类型或接口)的“__type”属性。

- 或 -

尝试将 JSON 数组转换为类似数组的托管类型,该类型不可用作 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

在反序列化期间,将引用序列化程序的当前类型解析程序,从而确定在转换嵌套在数组和字典类型中的元素时要使用的托管类型。 因此,反序列化过程会循环访问 的所有嵌套元素 input。 有关类型解析程序的详细信息,请参阅 JavaScriptTypeResolver 类。

适用于