JavaScriptSerializer.Deserialize 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
| 名称 | 说明 |
|---|---|
| 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 类。