JavaScriptConverter Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje abstraktní základní třídu pro vlastní typ převaděče.
public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
- Dědičnost
-
JavaScriptConverter
Příklady
Následující příklad ukazuje, jak vytvořit vlastní převaděč pro ListItemCollection třídu.
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
Poznámky
Třída JavaScriptConverter umožňuje implementovat serializace a deserializace procesy pro spravované typy, které nejsou nativně podporovány JavaScriptSerializer třídou. Můžete také použít JavaScriptConverter , když potřebujete větší kontrolu nad procesem serializace a deserializace.
Vlastnost SupportedTypes označuje typy, pro které vlastní převaděč poskytuje služby převaděče.
Chcete-li označit, že instance musí použít JavaScriptSerializer vlastní převaděč, je nutné zaregistrovat převaděč v instanci. Pokud používáte JavaScriptSerializer třídu přímo, měli byste použít metodu RegisterConverters k registraci převaděče. V opačném případě, pokud vyvoláváte webové metody z ECMAScript (JavaScript) a chcete použít vlastní převaděč, můžete ho zaregistrovat přidáním elementu converters
do konfiguračního souboru. Další informace najdete v tématu Postupy: Konfigurace služeb ASP.NET v Microsoft Ajax.
JavaScriptSerializer Když instance serializuje typ, pro který má zaregistrovaný vlastní převaděč, serializátor volá metoduSerialize. Podobně, když JavaScriptSerializer instance deserializuje řetězec JSON (JavaScript Object Notation) a rozpozná, že typ uvnitř řetězce JSON má přidružený vlastní převaděč, serializátor volá metodu Deserialize .
Poznámky pro implementátory
Pokud dědíte z JavaScriptConverter, musíte přepsat následující členy:
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypes JavaScriptSerializer poskytuje metodu ConvertToType<T>(Object) , kterou budou používat implementátoři nástroje JavaScriptConverter. Kód převaděče musí být schopen přijmout hodnotu, která je obsažena ve slovníku, který serializátor předává do něj, a pak převést hodnotu na objekt typu
T
. Místo opětovné implementace vlastního konverzního kódu k tomuto účelu můžete volat metodu ConvertToType<T>(Object) .
Konstruktory
JavaScriptConverter() |
Inicializuje novou instanci JavaScriptConverter třídy. |
Vlastnosti
SupportedTypes |
Při přepsání v odvozené třídě získá kolekci podporovaných typů. |
Metody
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) |
Při přepsání v odvozené třídě převede zadaný slovník na objekt zadaného typu. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
Serialize(Object, JavaScriptSerializer) |
Při přepsání v odvozené třídě vytvoří slovník dvojic název/hodnota. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |