JavaScriptConverter Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit une classe de base abstraite pour un convertisseur de type personnalisé.
public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
- Héritage
-
JavaScriptConverter
Exemples
L’exemple suivant montre comment créer un convertisseur personnalisé pour la ListItemCollection classe .
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
Remarques
La JavaScriptConverter classe vous permet d’implémenter des processus de sérialisation et de désérialisation pour les types managés qui ne sont pas pris en charge en mode natif par la JavaScriptSerializer classe . Vous pouvez également utiliser JavaScriptConverter lorsque vous avez besoin de davantage de contrôle sur le processus de sérialisation et de désérialisation.
La SupportedTypes propriété indique les types pour lesquels un convertisseur personnalisé fournit des services de convertisseur.
Pour indiquer qu’un convertisseur personnalisé doit être utilisé par l’instance JavaScriptSerializer , vous devez inscrire le convertisseur auprès de l’instance. Si vous utilisez la JavaScriptSerializer classe directement, vous devez utiliser la RegisterConverters méthode pour inscrire le convertisseur. Sinon, si vous appelez des méthodes Web à partir d’ECMAScript (JavaScript) et que vous souhaitez utiliser le convertisseur personnalisé, vous pouvez l’inscrire en ajoutant un converters
élément dans le fichier de configuration. Pour plus d’informations, consultez Guide pratique pour configurer ASP.NET Services dans Microsoft Ajax.
Lorsque l’instance JavaScriptSerializer sérialise un type pour lequel un convertisseur personnalisé est inscrit, le sérialiseur appelle la Serialize méthode . De même, lorsque l’instance JavaScriptSerializer désérialise une chaîne JSON (JavaScript Object Notation) et reconnaît qu’un type à l’intérieur de la chaîne JSON est associé à un convertisseur personnalisé, le sérialiseur appelle la Deserialize méthode .
Notes pour les responsables de l’implémentation
Lorsque vous héritez de JavaScriptConverter, vous devez substituer les membres suivants :
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypes JavaScriptSerializer fournit la ConvertToType<T>(Object) méthode qui sera utilisée par les implémenteurs de JavaScriptConverter. Le code du convertisseur doit pouvoir prendre une valeur contenue dans le dictionnaire que le sérialiseur lui transmet, puis convertir cette valeur en un objet de type
T
. Au lieu de ré-implémenter le code de conversion personnalisé pour cela, vous pouvez appeler la ConvertToType<T>(Object) méthode .
Constructeurs
JavaScriptConverter() |
Initialise une nouvelle instance de la classe JavaScriptConverter. |
Propriétés
SupportedTypes |
En cas de substitution dans une classe dérivée, obtient une collection des types pris en charge. |
Méthodes
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) |
En cas de substitution dans une classe dérivée, convertit le dictionnaire fourni en un objet du type spécifié. |
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
Serialize(Object, JavaScriptSerializer) |
En cas de substitution dans une classe dérivée, génère un dictionnaire de paires nom/valeur. |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |