Partager via


JavaScriptConverter Classe

Définition

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 quand 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 directement la JavaScriptSerializer classe, 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 il a un convertisseur personnalisé 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 a un convertisseur personnalisé associé, 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 :

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)

S’applique à

Voir aussi