JavaScriptConverter 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
為自訂型別轉換子提供抽象基底類別。
public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
- 繼承
-
JavaScriptConverter
範例
下列範例示範如何建立 類別的 ListItemCollection 自定義轉換器。
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Web.UI.WebControls;
using System.Collections;
namespace System.Web.Script.Serialization.CS
{
public class ListItemCollectionConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
//Define the ListItemCollection as a supported type.
get { return new ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(ListItemCollection) })); }
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
ListItemCollection listType = obj as ListItemCollection;
if (listType != null)
{
// Create the representation.
Dictionary<string, object> result = new Dictionary<string, object>();
ArrayList itemsList = new ArrayList();
foreach (ListItem item in listType)
{
//Add each entry to the dictionary.
Dictionary<string, object> listDict = new Dictionary<string, object>();
listDict.Add("Value", item.Value);
listDict.Add("Text", item.Text);
itemsList.Add(listDict);
}
result["List"] = itemsList;
return result;
}
return new Dictionary<string, object>();
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (type == typeof(ListItemCollection))
{
// Create the instance to deserialize into.
ListItemCollection list = new ListItemCollection();
// Deserialize the ListItemCollection's items.
ArrayList itemsList = (ArrayList)dictionary["List"];
for (int i=0; i<itemsList.Count; i++)
list.Add(serializer.ConvertToType<ListItem>(itemsList[i]));
return list;
}
return null;
}
}
}
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System.Web.UI.WebControls
Imports System.Collections
Namespace System.Web.Script.Serialization.VB
Public Class ListItemCollectionConverter
Inherits JavaScriptConverter
Public Overrides ReadOnly Property SupportedTypes() As _
System.Collections.Generic.IEnumerable(Of System.Type)
Get
' Define the ListItemCollection as a supported type.
Return New ReadOnlyCollection(Of Type)(New List(Of Type) _
(New Type() {GetType(ListItemCollection)}))
End Get
End Property
Public Overrides Function Serialize(ByVal obj As Object, _
ByVal serializer As JavaScriptSerializer) As _
System.Collections.Generic.IDictionary(Of String, Object)
Dim listType As ListItemCollection = CType(obj, ListItemCollection)
If Not (listType Is Nothing) Then
' Create the representation.
Dim result As New Dictionary(Of String, Object)
Dim itemsList As New ArrayList()
Dim item As ListItem
For Each item In listType
' Add each entry to the dictionary.
Dim listDict As New Dictionary(Of String, Object)
listDict.Add("Value", item.Value)
listDict.Add("Text", item.Text)
itemsList.Add(listDict)
Next item
result("List") = itemsList
Return result
End If
Return New Dictionary(Of String, Object)
End Function
Public Overrides Function Deserialize(ByVal dictionary As _
System.Collections.Generic.IDictionary(Of String, Object), _
ByVal type As System.Type, ByVal serializer As JavaScriptSerializer) As Object
If dictionary Is Nothing Then
Throw New ArgumentNullException("dictionary")
End If
If type Is GetType(ListItemCollection) Then
' Create the instance to deserialize into.
Dim list As New ListItemCollection()
' Deserialize the ListItemCollection's items.
Dim itemsList As ArrayList = CType(dictionary("List"), ArrayList)
Dim i As Integer
For i = 0 To itemsList.Count - 1
list.Add(serializer.ConvertToType(Of ListItem)(itemsList(i)))
Next i
Return list
End If
Return Nothing
End Function
End Class
End Namespace
備註
類別 JavaScriptConverter 可讓您針對類別原生不支援 JavaScriptSerializer 的 Managed 型別實作串行化和還原串行化程式。 當您需要對串行化和還原串行化程式進行更多控制時,也可以使用 JavaScriptConverter 。
屬性 SupportedTypes 會指出自定義轉換器提供轉換器服務的型別。
若要指出實例必須使用 JavaScriptSerializer 自定義轉換器,您必須向 實例註冊轉換器。 如果您直接使用 JavaScriptSerializer 類別,您應該使用 RegisterConverters 方法來註冊轉換器。 否則,如果您要從 ECMAScript (JavaScript) 叫用 Web 方法,而且想要使用自定義轉換器,您可以在組態檔中新增 converters
元素來註冊它。 如需詳細資訊,請參閱 How to: Configure ASP.NET Services in Microsoft Ajax。
JavaScriptSerializer當實例串行化其已註冊自定義轉換器的類型時,串行化程式會呼叫 Serialize 方法。 同樣地,當 JavaScriptSerializer 實例還原串行化 JavaScript 物件表示法 (JSON) 字串,並辨識 JSON 字串內的類型具有與其相關聯的自定義轉換器時,串行化程式會呼叫 Deserialize 方法。
給實施者的注意事項
當您繼承自 JavaScriptConverter時,必須覆寫下列成員:
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypes JavaScriptSerializer ConvertToType<T>(Object)提供實JavaScriptConverter作者將使用的方法。 轉換器程式代碼必須能夠取得包含在串行化程序傳遞給它的字典中的值,然後將該值轉換成 類型的
T
物件。 您可以呼叫 ConvertToType<T>(Object) 方法,而不是重新實作自定義轉換程式代碼來完成此動作。
建構函式
JavaScriptConverter() |
初始化 JavaScriptConverter 類別的新執行個體。 |
屬性
SupportedTypes |
在衍生類別中覆寫時,取得所支援型別的集合。 |
方法
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) |
在衍生類別中覆寫時,將提供的字典轉換成屬於指定型別的物件。 |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
Serialize(Object, JavaScriptSerializer) |
在衍生類別中覆寫時,建置由名稱/值組所組成的字典。 |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |